为什么使用do{...} while(0) ?

来源:互联网 发布:索尼lt18i软件 编辑:程序博客网 时间:2024/04/27 03:06

在一些函数的代码里偶尔会看到如标题所述的用法,再此总结一下:

首先要说的是: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)的用途在此



	
				
		
原创粉丝点击