do{...}while(0)的作用

1. 分号的一致性(派生原因)

假设你需要释放一段内存

#define SAFE_FREE(x) if (x) { free(x); x = null;}

你在使用这个宏的时候,就变成了这样

if (...)
    SAFE_FREE(x)
else
    stuff();
    

而使用do while(0)后,分号就可以加在后面了。 😃

#define SAFE_FREE(x) do { if (x) {free(x); x = null;}} while(0)

2. 定义较为复杂的宏(最主要的原因)

假设你需要定义的宏

#define DOSOMETHING()\
        foo1(); \
        foo2();

而当使用的时候,可能展开错误

if (a >0)
    DOSOMETHING();

展开成为了

if (a > 0)
    foo1();
foo2();

3. 避免空宏引起的warning

#define EMPTYMICRO do{} while(0)

4. 实现复杂的函数

在一个块内定义的变量不会影响其他作用域

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值