iOS_宏定义相关
2018-04-20 本文已影响7人
怪客半
2018.4.20
- 定义涉及值的宏时最好加上括号。
/**
敲代码过程中发现定义宏不加括号,然后在另一个宏里调用这个宏的话,获得
的结果和自己的预期不一样,所以做这个测试。
*/
- (void)effectOfParenthesesOnMacros {
#define macro1 1 > 2 ? 5 : 10 //10
#define macro2 (1 > 2 ? 5 : 10) //10
/*宏里实现值的相加,之前的想法:macro1的值已经确定,这个值'10'分别和
'1'与'2'相加,结果应该是'11'和'12',然而打印结果并非如此。
推测macro3、macro4借用的是macro1的整体而不是值:
macro3 = 1 + 1 > 2 ? 5 : 10
macro4 = 2 + 1 > 2 ? 5 : 10
*/
#define macro3 1 + macro1
#define macro4 2 + macro1
/*macro2加上括号之后符合预期结果*/
#define macro5 1 + macro2
#define macro6 2 + macro2
NSLog(@"macro1:%d",macro1);
NSLog(@"macro2:%d",macro2);
NSLog(@"macro3:%d",macro3);
NSLog(@"macro4:%d",macro4);
NSLog(@"macro5:%d",macro5);
NSLog(@"macro6:%d",macro6);
}
代码地址:https://github.com/ThinkerLqf/OCDemo_01/blob/master/OCDemo_01/PrintTest/PrintTestVC.m
对应的effectOfParenthesesOnMacros方法。