iOS帶屢次使用參數的宏定義

當我完成了一個簡單的快捷返回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);\
})\
複製代碼
相關文章
相關標籤/搜索