现在的位置: 首页 > 综合 > 正文

利用clang和gcc进行宏的研究

2018年02月14日 ⁄ 综合 ⁄ 共 622字 ⁄ 字号 评论关闭

写一个宏

#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)

然后在一个复杂的使用场景中就可以很明显看到这个宏定义的问题。

抱歉!评论已关闭.