当我完成了一个简单的快捷返回UIColor的宏之后:
#define KColor(r,g,b,a) [UIColor k_colorWithRed:r green:g blue:b alpha:a]
突然又想到实际开发中经常需要使用到灰色,而UIColor默认只能返回几种默认的几个固定的灰色,不如自己在创建一个灰色的宏:
#define KColorGray(x) KColor(x,x,x,1)
看了一秒钟发现不对,这么写肯定有问题,比如下面的情况:
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);
所以为了防止这样情况,需要这么写:
#define KColorGray(x) ({\
NSInteger __color = (x);\
KColor(__color,__color,__color,1);\
})\