Linux 编程的tricky 一:宏定义中的do-while(0)

来源:互联网 发布:linux 调度命令 编辑:程序博客网 时间:2024/05/16 05:03

1.使用do-while(0):为了能够在条件语句中使用复杂的宏定义。

#include <stdio.h>#include <stdlib.h>#define FOO(x) \printf("x=%d\n",x); \x++;#define FOO2(x) \do{  \        printf("x=%d\n",x); \        x++;                \}while(0)int main(){    printf("Hello world!\n");    int x = 5;    if(x==5)FOO2(x);    printf("x1=%d\n",x);    if(x==5)FOO(x);    printf("x2=%d\n",x);    return 0;}


运行结果:


调用FOO(x)在条件语句if(x==5)之后,按照预期,此时x=6,应当不执行该调用。确实,并没有执行printf("x=%d",x);但是执行了x++的操作,导致x2=7.

但是单纯把宏定义的多条指令用{}括起来,问题出在调用FOO(x)后的 " ; ".如果不写该分号,看起来不像函数调用,但是写了这个分号。在{}之后就有个分号,把if语句结束了。如果if后面有else,则该else就无法匹配了。(编译报错)

原创粉丝点击