do...while(0)的作用
2012-06-09 22:16
141 查看
今天在看一段开源代码时,发现里面的宏函数几乎都写成这样:
宏中间的代码只会执行一次,为什么要写在do...while(0)循环中呢?
假设一个宏函数定义为:
也许你会认为可以写成这样:
而把宏函数的代码写在do...while循环中间就不会出现这个问题了。
#define xxx \ do { \ ... \ } while(0)
宏中间的代码只会执行一次,为什么要写在do...while(0)循环中呢?
假设一个宏函数定义为:
#define fun() \ fun1(); \ fun2();那么在执行下面这段语句时就会出现问题。
if (cas) fun();fun2()无论在什么情况下都会被执行,这肯定不是我们想要的结果。
也许你会认为可以写成这样:
#define fun() \ { \ fun1(); \ fun2(); \ }但是下面这段代码会编译错误,因为else前面多了一个‘;’
if (cas) fun();
else
....
而把宏函数的代码写在do...while循环中间就不会出现这个问题了。
#define fun() \ do { \ fun1(); \ fun2(); \ } while(0)
相关文章推荐
- do{...}while(0)的作用
- do {...} while (0) 在宏定义中的作用
- do..while的作用
- do...while(0)的作用
- do {...} while (0) 在宏定义中的作用
- do{}while(0)在宏定义中的作用
- do {...} while (0) 在宏定义中的作用
- do{...}while(0)在宏定义中的作用
- do{}while(0)在宏定义中的作用
- do {...} while (0) 在宏定义中的作用
- do {...} while(0) 在宏定义中的作用
- 内核代码宏中 do{...}while(0) 的作用以及宏中#和##的作用及典型应用
- do {...} while (0) 在宏定义中的作用
- do...while(0)的作用(FAQ/DoWhile0)
- do{}while(0)宏的作用的定义
- 宏定义中do{}while(0) 的作用
- do while(0)作用
- do...while(0)的作用
- do{}while(0)的作用
- do {...} while (0) 在宏定义中的作用