码迷,mamicode.com
首页 > 其他好文 > 详细

do{...}while(0)的作用

时间:2015-06-10 22:30:26      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:

不是为了循环的while。

 

 

1.用于宏定义,保证宏一定按照想要的方式执行。

#define   foo(x)     start(x); end(x)

 

if(flag)

foo(x);

扩展以后的结果 

if(flag)

start(x);

end(x);

如果是do{..}while(0)的形式,可以保证宏按照定义的预期执行,并且必定执行一次。

#define foo(x)   do{start(x);end(x)}while(0)

if(flag)

foo(x);

扩展以后的结果

if(flag)

  do{

start(x);

end(x);

}

while(0)

会被正确执行。

其实这个我觉得宏也可以解决,加上作用域。

#define foo(x) {start(x); end(x)} 

2. 替代goto完成多分支合并处理。

char *x = NULL; 

if(type = PEOPLE)

x = malloc(sizeof(stPeople));

do something...

if(error) 

goto end; 

else if(type == MONKEY)

 x = malloc(sizeof(stMonkey));

  do something...

if(error) 

goto end; 

}

return 0; 

end: 

free(x);

return -1; 

这种goto语句可以从多层分支中跳出来,集中处理公共事务。

相比goto的灵活,do{...}while(0)代码更清晰。

char *x = NULL; 

do{ 

 

if(type = PEOPLE)

x = malloc(sizeof(stPeople));

do something...

if(error) 

break; 

else if(type == MONKEY)

  x = malloc(sizeof(stMonkey));

  do something...

if(error) 

break; 

}

return 0; 

}

while(0) 

free(x);

return -1; 

 但也不是绝对的,{}范围内是局部变量,和try{}语句块的一样,不能够被语句块以外访问,这是一个极大的麻烦。

do{...}while(0)的作用

标签:

原文地址:http://www.cnblogs.com/learn-my-life/p/4567300.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!