當我完成了一個簡單的快捷返回UIColor的宏以後:bash
#define KColor(r,g,b,a) [UIColor k_colorWithRed:r green:g blue:b alpha:a]
複製代碼
忽然又想到實際開發中常常須要使用到灰色,而UIColor默認只能返回幾種默認的幾個固定的灰色,不如本身在建立一個灰色的宏:spa
#define KColorGray(x) KColor(x,x,x,1)
複製代碼
看了一秒鐘發現不對,這麼寫確定有問題,好比下面的狀況:code
NSInteger gray = 100
self.view.backgroundColor = KColorGray(gray += 50);
複製代碼
原本指望的顏色是r:150,g:150,b:150,實際上的顏色是r:150,g:200,b:250,由於宏的定義本質是替換,上面其實是這樣的:開發
self.view.backgroundColor = KColor(gray += 50,gray += 50,gray += 50,1);
複製代碼
因此爲了防止這樣狀況,須要這麼寫:it
#define KColorGray(x) ({\
NSInteger __color = (x);\
KColor(__color,__color,__color,1);\
})\
複製代碼