do...while(0)的作用

今天在看一段开源代码时,发现里面的宏函数几乎都写成这样:
#define xxx \
    do { \
        ... \
    } while(0)

宏中间的代码只会执行一次,为什么要写在do...while(0)循环中呢?

假设一个宏函数定义为:

#define fun() \
    fun1(); \
    fun2();
那么在执行下面这段语句时就会出现问题。
if (cas)
    fun();
fun2()无论在什么情况下都会被执行,这肯定不是我们想要的结果。

也许你会认为可以写成这样:

#define fun() \
{ \
    fun1(); \
    fun2(); \
}
但是下面这段代码会编译错误,因为else前面多了一个‘;’

if (cas)
    fun();
else
    ....

而把宏函数的代码写在do...while循环中间就不会出现这个问题了。

#define fun() \
    do { \
        fun1(); \
        fun2(); \
    } while(0)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值