当我完成了一个简单的快捷返回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);\
})\
复制代码