您的位置:首页 > 其它

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

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

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







                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: