ios - 试图理解宏的操作顺序

标签 ios objective-c macros

#define IS_IPHONE5 (([[UIScreen mainScreen] bounds].size.height-568)?NO:YES)
#define HEIGHT IS_IPHONE5 ? 568 : 480

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"HEIGHT: %d",HEIGHT);
    NSLog(@"HEIGHT: %d",HEIGHT+99);
}

以上两个日志的结果都是 568。我猜这是因为操作的顺序而发生的。任何人都可以给我一个很好的解释吗?

(我不是在寻找解决方案或替代方法来执行上述操作。只是解释为什么会发生这种情况)

最佳答案

这个

NSLog(@"hight: %d",HIGHT+99);

将扩展为

 NSLog(@"hight: %d",IS_IPHONE5 ? 568 : 480+99);

然后

NSLog(@"hight: %d",(([[UIScreen mainScreen] bounds].size.height-568)?NO:YES) ? 568 : 480+99);

所以它将产生 568

解决方案:

NSLog(@"hight: %d",(HIGHT)+99);

#define HIGHT (IS_IPHONE5 ? 568 : 480)

我建议使用第二种解决方案。

关于ios - 试图理解宏的操作顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20569941/

相关文章:

ios - Xcode 用户为 JSON 服务定制 NSURL

C 宏的创造性/有趣用途;元编程

macros - 在使用 haxe 宏构建的函数中使用局部变量

更改设备旋转时的iphone背景图像

ios - 在 Swift 中监听硬件键盘按键

ios - 视频层上的CALayer位置动画

c - 宏中的参数计数

ios - 我需要区分两个触摸事件。如何区分两个事件?

ios - UITabBarController 和 UIViewController 转换

objective-c - 我可以假设并处理 Objective-C 中的 SEL 作为指向某物的指针吗?