iOS的宏定义需谨慎使用,否则埋了雷都不知道咋死的!
今天在优化项目的时候,改了一个宏定义,结果出现了匪夷所思的问题:
这是我一开始定义的一个全局的导航栏加状态栏高度的宏:
定义一个导航栏的宏,在定义一个状态栏的宏,然后再定义一个相加的宏
貌似没有问题,各个值都能获取到,没问题!
可是,在项目中有很多地方都会进行一些加减等算法,比如这个:
//#define Hong1 44//宏1
//#define Hong2 44 //宏2
//#define Hong3 Hong1 + Hong2 // 宏3
假如 宏Hong1是44, 宏Hong2是44;
那么 Hong3 就因该是 44+44,等于88。
int value = 100 - Hong3;
那么 100-88,应该就等于12!我也是那么想的!
然而,并不是,这个value的值仍然是100!
wf!见了鬼了不是!
其实宏替换,只是替换而已,这里的宏Hong3,只是替换Hong1 + Hong2 这两个宏加法,
所以把上面的那个算式,解刨一下就是这样:
value = 100 - Hong3 就等于 100-Hong1 + Hong2 == 100-44+44;
看到这大家焕然大悟!算式是有优先级的嘛,所以,我们在定义宏的时候如果其中有加减等算法的时候,一定要加上括号!
仅此将我踩的坑献给那些需要帮助的人