利用clang和gcc进行宏的研究

写一个宏

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值