iOS的宏定義需謹(jǐn)慎使用,否則埋了雷都不知道咋死的!
今天在優(yōu)化項(xiàng)目的時(shí)候,改了一個(gè)宏定義,結(jié)果出現(xiàn)了匪夷所思的問題:
這是我一開始定義的一個(gè)全局的導(dǎo)航欄加狀態(tài)欄高度的宏:
定義一個(gè)導(dǎo)航欄的宏,在定義一個(gè)狀態(tài)欄的宏,然后再定義一個(gè)相加的宏
image.png
貌似沒有問題,各個(gè)值都能獲取到,沒問題!
可是,在項(xiàng)目中有很多地方都會進(jìn)行一些加減等算法,比如這個(gè):
//#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,應(yīng)該就等于12!我也是那么想的!
然而,并不是,這個(gè)value的值仍然是100!
wf!見了鬼了不是!
其實(shí)宏替換,只是替換而已,這里的宏Hong3,只是替換Hong1 + Hong2 這兩個(gè)宏加法,
所以把上面的那個(gè)算式,解刨一下就是這樣:
value = 100 - Hong3 就等于 100-Hong1 + Hong2 == 100-44+44;
看到這大家煥然大悟!算式是有優(yōu)先級的嘛,所以,我們在定義宏的時(shí)候如果其中有加減等算法的時(shí)候,一定要加上括號!
image.png
僅此將我踩的坑獻(xiàn)給那些需要幫助的人