为什么使用do{...} while(0) ?
2011-10-29 10:28
162 查看
在一些函数的代码里偶尔会看到如标题所述的用法,再此总结一下:
首先要说的是:do {...}while(0)这种语句主要用在宏定义里面
考虑下面几种代码情况:
1)
if分支出现问题了,因为if后仅能放置一条语句或一个语句块。这显然是不对的。
那如果把宏加上括号后定义是否可以呢?
首先要说的是:do {...}while(0)这种语句主要用在宏定义里面
考虑下面几种代码情况:
1)
if ( ...) FUN1(x); else FUN2(y);从这里看,上述代码看起来没有任何,无非就是一个简单的if else条件语句。但是,从代码里你看到了FUN1和FUN2,这两个函数,不过有可能他们都是宏定义。例如:
#define FUN1(x) x=1;x++;这样的话,如果把这段宏放到上述代码里,明显是有问题的,代码如下:
if ( ...) x=1;x++; else FUN2(y);
if分支出现问题了,因为if后仅能放置一条语句或一个语句块。这显然是不对的。
那如果把宏加上括号后定义是否可以呢?
#define FUN1(x) {x=1;x++;}if else代码变成
if ( ...) {x=1;x++;}; else FUN2(y);注意上述代码最后的分号,因为C/C++语言的习惯是每条语句后加分号,但这样显然不对了,现在do{}while(0)就派上用场了,代码如下
#define FUN1(x) do{x=1;x++;}while(0) if ( ...) do{x=1;x++;}while(0); else FUN2(y);这是没有问题的,所以do{}while(0)的用途在此
相关文章推荐
- 为什么在宏中使用do{...}while(0)结构
- 为什么使用do{}while(0)?
- 为什么使用do{}while(0)来进行宏定义
- 宏定义为什么要使用do{……}while(0)形式
- 为什么使用do{}while(0)来进行宏定义
- 为什么宏定义总是要使用do-while语句呢?
- 为什么使用do{}while(0)来进行宏定义
- [置顶] 宏函数为什么使用do{...}while{0}包起来
- (英文)为什么Linux内核中,许多#defines都使用了 do { ... } while(0)?
- 为什么要在宏中使用 do{...}while(0) (转)
- 编程技巧:使用 do {} while (false) 来避免缩进
- C语言中循环结构语句 for循环及while,do--while 的使用
- 宏定义中使用do{}while(0)的好处
- 宏定义中使用do{}while(0)的好处
- 宏定义中使用do{}while(0)的好处
- do{}while(0)的使用(COPY)
- 使用do{ } while(0)的好处
- 宏定义中使用do{}while(0)的好处
- 宏定义中使用do{}while(0)的好处
- Java do-while的使用