首页 > 其他 > 详细

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

时间:2015-06-10 22:29:44      阅读:262      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!