鱼C论坛

 找回密码
 立即注册
查看: 2238|回复: 1

[技术交流] do while(0)的好处

[复制链接]
发表于 2016-9-1 10:19:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
关于do while 循环大家还有没有更多认识?


使用do{ } while(0)的好处
1.替代{},实现局部作用域.在一些C的实现里也可以用.
2.避免使用GOTO,用break做跳出.

当你执行一段代码到一半,想跳过剩下的一半的时候,如果你正处于do while循环中,则能用break达到这个目的。如下伪代码:
[cpp] view plain copy

    do  
    {  
      我执行  
      我执行。。  
      我再执行。。。  
      if (有什么条件满足了我)  
      {  
        呀,我想跳到另外一段代码了,剩下的不执行了,可是不建议用goto语句,怎么办呢?  
         break;/*看我的*/  
      }  
      我有可能被执行  
      我有可能被执行。  
      我有可能被执行。。   
    }while(false)  
    想跳到这行来,使用break不是很方便吗?  


假如啊a, b分别是两条C语句,定义一个顺序执行他们的宏有几种写法,比如

[cpp] view plain copy

    #define AB1    a; b;     // x, 下面语句b不能被执行: if (cond) AB1;  
    #define AB2    { a; b; } // x, 下面语句编译出错:if (cond) AB2; else ...;  
    #define AB3    a, b      // x, 有运算符优先级问题  
    #define AB4    do { a; b; } while (0)  


前面几个都是有问题的,只有do while(0)解决得比较好。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-26 21:38:52 | 显示全部楼层
所谓的好处二算不上什么好处
所谓的 不能用goto是 那样做会跳过一些语句
你用 do while 一样跳过一些语句
从坏处上来说 一模一样
甚至 用do while 还不如直接用goto 直观

这种单纯为了不只用goto而替换毫无意义
所谓的避免goto 正确的做法是 调整代码逻辑
避免跳过一些语句的情况出现
当然 很多时候 根本调整不了
那么 直接使用goto是最好的选择
do while 代替goto 毫无价值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-28 19:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表