宏定义中Do{...}while(0)的作用

我们在有些代码中特别是linux内核源码中会见到这样的宏定义形式:#define  MACRO_DATA    do{........}while(0);这个do{...}while(0),表达式内一般会封装多个语句。那么如此的定义形式有什么作用呢?

1.如果我们如此定义

#define FOO(x) foo(x); bar(x) 
 
if (condition) 
    FOO(x); 
else // syntax error here 
    ...;

展开则是这样的:

if (condition) 
   foo(x); bar(x) ; 
else // syntax error here 
    ...;

注意到bar(x)则不再是if 表达式的作用域内了。

2.如果如此定义:

#define FOO(x) { foo(x); bar(x); } 

那我们将需如此使用

if (condition) 

FOO(x)     //省略分号,但这违反我们的直观感觉

else 
    ... 

3.

#define FOO(x) do { foo(x); bar(x); } while (0)

 这样定义就能达到预定效果了。

if (condition) 
    FOO(x); 
else 
    ....

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值