C/C++中do{...}while(0)的作用

来源:互联网 发布:不用网络的小说软件 编辑:程序博客网 时间:2024/06/05 05:35

do{...}while(0)

这种形式经常用在循环结构中出现,此外在Linux内核中你也会经常看到这种循环结构在宏定义中的应用,这种结构保证了宏定义执行指令的完整性,避免歧义。


举例1(辅助定义复杂的宏):

我们在使用单个语句的宏定义时

#define  DOSOMETHING(a,b);   do_1(a,b);


这种形式不会出现歧义,然而当你想定义这样的宏,例如:

#define  DOSOMETHING(a,b)   \

             do_1(a,b);\

             do_2(a,b); \


这个宏定义的本意是如果代码中出现了DOSOMETHING(a,b)那么do_1(a,b)和do_2(a,b)就都会被执行,因而会在if语句中出现歧义,例如

if(a>b)

     DOSOMETHING(a,b);


这种形式在宏定义替换的时候就会出现歧义

if(a>b)

     do_1(a,b);

     do_2(a,b);

那么do_2(a,b)就一定会被执行,而do_1(a,b)却不一定会被执行,因而出现歧义。

do{...}while(0)用法保证宏定义块的完整性处理。

举例2(定义一个单独的函数块来实现复杂的操作):

当你的功能很复杂,变量很多你又不愿意增加一个函数的时候,do{...}while(0);将你的代码写在里面,里面可以定义变量而不用考虑变量名会同函数之前或者之后的重复。



0 0
原创粉丝点击