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方法。

上一篇 下一篇

猜你喜欢

热点阅读