您的位置:首页 > 其它

do...while(0)的作用

2012-06-09 22:16 141 查看
今天在看一段开源代码时,发现里面的宏函数几乎都写成这样:
#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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: