不能直接使用#define变量加

时间:2016-05-27 08:09:11

标签: ios objective-c

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

希望有人解释为什么会这样。任何帮助或建议都将非常感激。

1 个答案:

答案 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的预期答案。