在ViewController
的顶部,我已经定义了MESSAGE_SIZE
这样的
#define IPHONE [UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone
#define MESSAGE_SIZE IPHONE ? 12 : 13
在方法中,我尝试通过2种方式访问MESSAGE_SIZE
。它似乎相同但产生不同的结果
float size = MESSAGE_SIZE + 2;
NSLog(@"size = %f",size);
float size2 = MESSAGE_SIZE;
float size3 = size2 + 2;
NSLog(@"size3 = %f",size3);
我在IPHONE上测试,这是Log
2016-05-27 14:59:02.992 EarCrush[8278:135453] size = 12.000000
2016-05-27 14:59:02.992 EarCrush[8278:135453] size3 = 14.000000
希望有人解释为什么会这样。任何帮助或建议都将非常感激。
答案 0 :(得分:2)
预处理器宏是花哨的文本替换命令。在编译时发生的是
float size = MESSAGE_SIZE + 2;
NSLog(@"size = %f",size);
变为
float size = IPHONE ? 12 : 13 + 2;
NSLog(@"size = %f",size);
我假设IPHONE
评估为true,因此您获得12
。
在第二种情况下
float size2 = MESSAGE_SIZE;
float size3 = size2 + 2;
NSLog(@"size3 = %f",size3);
变为
float size2 = IPHONE ? 12 : 13; // 12
float size3 = size2 + 2; // 14
NSLog(@"size3 = %f",size3);
您可以使用括号来改善您的宏。
#define MESSAGE_SIZE (IPHONE ? 12 : 13)
现在第一个例子变成了
float size = (IPHONE ? 12 : 13) + 2;
NSLog(@"size = %f",size);
将给出14
的预期答案。