我已经定义了预处理器指令:
#define PTM_RATIO 32
#define PTM_RATIO_2 isIPad?64:32
然后在方法中我使用上面的指令:
NSLog(@"PTM_RATIO %d",PTM_RATIO);
NSLog(@"PTM_RATIO_2 %d",PTM_RATIO_2);
float32 test=100*PTM_RATIO;
float32 test2=100*PTM_RATIO_2;
NSLog(@"Test %f",test);
NSLog(@"Test2 %f",test2);
以下是上述代码的输出:
2013-03-25 23:43:57.011 Box2d[3625:15203] PTM_RATIO 32
2013-03-25 23:43:57.019 Box2d[3625:15203] PTM_RATIO_2 32
2013-03-25 23:43:57.020 Box2d[3625:15203] Test 3200.000000
2013-03-25 23:43:57.021 Box2d[3625:15203] Test2 32.000000
如你所见,PTM_RATIO和PTM_RATIO_2都是32.那么为什么当100乘以PTM_RATIO时我得到3200.000000,而当它乘以PTM_RATIO_2时得到32.000000?
答案 0 :(得分:3)
预处理器宏主要是文本替换。变化:
#define PTM_RATIO_2 isIPad?64:32
为:
#define PTM_RATIO_2 (isIPad?64:32)
没有它,您的源代码:
100*PTM_RATIO_2
扩展为:
100*isIPad?64:32
然后解析为:
(100*isIPAD) ? 64 : 32
答案 1 :(得分:1)
PTM_RATIO_2在实际代码中按如下方式评估
float32 test2 = (100*isIPad)?64:32;
您假设MACRO将在实时代码计算之前进行评估。