gpt4 book ai didi

ios - IOS 8 中的预处理器宏和 bool 值未正确评估

转载 作者:行者123 更新时间:2023-11-29 10:38:17 25 4
gpt4 key购买 nike

组合预处理器宏和 bool 值在 IOS8 中计算不正确

我在装有 IOS 8 的 IPHONE 4 上运行它。代码在 IOS 7 上运行正常

我们是否必须更改代码才能停止使用这些宏?

#define isiPhone4  ([[UIScreen mainScreen] bounds].size.height == 568)?FALSE:TRUE

BOOL myBool = YES;
if (myBool || isiPhone4) {
NSLog(@"TRUE");
} else {
NSLog(@"FALSE");
}

if (myBool) {
NSLog(@"TRUE");
} else {
NSLog(@"FALSE");
}

if (isiPhone4) {
NSLog(@"TRUE");
} else {
NSLog(@"FALSE");
}

输出错误的真的真

最佳答案

问题出在您的宏上:因为您没有将它括在括号中,所以在它前面加上一个逻辑表达式可以改变它的含义。

这是一个非常普遍的问题——这正是为什么在不严格要求宏的情况下(即在大多数情况下)应该避免使用宏的原因。当你的宏被扩展到位时,Objective-C 编译器会看到这种情况:

if (myBool || ([[UIScreen mainScreen] bounds].size.height == 568)?FALSE:TRUE) {
...
}

解析如下:

  • 条件:myBool || ([[UIScreen mainScreen] bounds].size.height == 568)
  • 为真:FALSE
  • 为假:TRUE

请注意 myBoo || 是如何成为条件的一部分的。这是因为 C 优先规则。请记住,当编译器解析表达式时,它不知道表达式的一部分来自宏,而另一部分在宏展开之前的代码中。

修复方法如下:

#define isiPhone4  (([[UIScreen mainScreen] bounds].size.height == 568)?FALSE:TRUE)

关于ios - IOS 8 中的预处理器宏和 bool 值未正确评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25832781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com