写一个宏
#define MAXX(x,y) ((x)>(y) ? (x):(y))
int main(int argc,char * argv[])
{
@autoreleasepool {
NSInteger a = 5, b=7;
int maxValue = MAXX(a, b);
NSLog(@"max =%d", maxValue);
returnUIApplicationMain(argc, argv, nil,NSStringFromClass([AppDelegateclass]));
}
}
为了看到这个宏转换后的效果, 即替换后的效果, 可以使用GCC或Clang命令。(GCC命令是以前编译器使用的,现在普遍不再使用)
使用terminal对这个.m文件进行转换
$:gcc -E main.m , 相同命令还有clang -E main.m , 以及clang -S main.m。 具体可以看help文档
转换后的效果代码如下:
NSInteger a = 5, b=7;
int maxValue = ((a)>(b) ? (a):(b));
NSLog(@"max =%d", maxValue);
这样就很容易看有替换后的效果。
比如在面对比较复杂的宏定义, 就可以通过这种方式来转换, 交看转换后的效果是否一致。(如果把上面的宏定义成 #define MAX(x,y) x>y?x:y)
然后在一个复杂的使用场景中就可以很明显看到这个宏定义的问题。