gpt4 book ai didi

ios - 不能直接加上#define变量

转载 作者:行者123 更新时间:2023-11-28 21:27:33 24 4
gpt4 key购买 nike

在我的 ViewController 顶部,我定义了一个 MESSAGE_SIZE,如下所示

#define IPHONE [UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone 
#define MESSAGE_SIZE IPHONE ? 12 : 13

在一个方法中,我尝试通过两种方式访问​​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

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

最佳答案

预处理器宏是花哨的文本替换命令。编译时发生的事情是

float size = MESSAGE_SIZE + 2;
NSLog(@"size = %f",size);

成为

float size = IPHONE ? 12 : 13 + 2;
NSLog(@"size = %f",size);

我假设 IPHONE 的计算结果为真,所以你得到 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 的预期答案。

关于ios - 不能直接加上#define变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37478173/

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