Chinaunix首页 | 论坛 | 博客
  • 博客访问: 35072
  • 博文数量: 12
  • 博客积分: 105
  • 博客等级: 民兵
  • 技术积分: 155
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-24 20:46
文章分类

全部博文(12)

文章存档

2014年(5)

2013年(3)

2012年(4)

我的朋友

分类: C/C++

2014-03-01 22:38:23

最近在看mongoose的源代码,发现里面有一条宏定义是这样的:

点击(此处)折叠或打开

  1. #define DBG(x) do { printf("%-20s ", __func__); printf x; putchar('\n'); \
  2.     fflush(stdout); } while(0)
google了下发现这个do{..}while(0)主要是为了:

可以把宏语句当整体来用,比如:
if (CONDITION)
    DBG(3);
else
    STATEMENTS

如果没有do{...} while(0)的宏展开后是
if (CONDITION)
   printf("%-20s ", __func__);
   
printf x; putchar('\n'); 
   
fflush(stdout);
else
    STATEMENTS
如果没有while{..}do(0),DBG(x)中只会有一条语句在if的分支执行,所以说单条if语句也加打括号也是个好习惯。

stackover中有更加详细的讨论,地址 

阅读(1000) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~