最近在看mongoose的源代码,发现里面有一条宏定义是这样的:
-
#define DBG(x) do { printf("%-20s ", __func__); printf x; putchar('\n'); \
-
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) |