今天看项目源码的时候发现有些地方用了do{} while(false)的用法,查了下发现这样确实有些优点,mark下。

1.最重要的优点,用在略微复杂的宏定义中。

#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)  

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

int foo()
{somestruct *ptr = malloc(...);dosomething...;if(error)goto END;dosomething...;if(error)goto END;dosomething...;
END:free(ptr);return 0;
}

避免goto语句的话,实用do while(false)就能很好的解决。

int foo()
{somestruct *ptr = malloc(...);do{dosomething...;if(error)break;dosomething...;if(error)break;dosomething...;}while(0);free(ptr);return 0;
}

转载于:https://www.cnblogs.com/chenhuan001/p/5930487.html

do while(false)实用技巧相关推荐

  1. jexcel可以合并单元格么_含金量超高的3个文本、字符合并实用技巧解读!

    当各位亲看到此篇文章时,说明已是2019年1月1日呢,感谢各位亲对小编的支持和厚爱,在这里祝福各位亲元旦快乐,"19"快乐,事业有成--同时,小编会继续努力为各位亲开发更多的实用技 ...

  2. JavaScript的一些实用技巧收藏

    JavaScript的一些实用技巧收藏 [Copy to clipboard] CODE: 1. οncοntextmenu="window.event.returnValue=false& ...

  3. APICloud开发者进阶之路 | 超级实用技巧

    金秋9月,脑海还是北京的"中非合作蓝"!今天按照惯例,柚子君还是要督促大家充充电的! 本周<30天,App开发从0到1>将要给大家分享第十章超级实用技巧,我们精选了其中 ...

  4. 使用Selenium WebDriver测试自动化的22条实用技巧

    使用Selenium进行测试自动化已使全球的网站测试人员能够轻松执行自动化的网站测试. Webdriver是Selenium框架的核心组件,通过它您可以针对不同类型的浏览器(例如Google Chro ...

  5. 快过年了,分享 25 个 JS 实用技巧送给大家吧

    本文主要介绍一些JS中用到的小技巧,可以在日常Coding中提升幸福度,将不定期更新~ 类型强制转换 1.1 string强制转换为数字 可以用 *1来转化为数字(实际上是调用 .valueOf方法) ...

  6. linux让新生成的文件自动加锁,Linux_实用技巧一则 Linux系统对文件进行加锁,当有多个工作线程要同时对一 - phpStudy...

    实用技巧一则 Linux系统对文件进行加锁 当有多个工作线程要同时对一个文件进行写操作时,如果不对该文件进行加锁就可能会因误操作而引起一系列的问题. 解决这个问题有多种方法.我们这里考虑使用文件锁来对 ...

  7. 实用技巧——获取验证码的倒计时

    实用技巧--获取验证码的倒计时 效果图 源码:GitHub CountDownTimer 创建对象,调用start的方法,开始倒计时 /*** 第一个参数:总时长(毫秒)* 第二个参数:多久执行一次回 ...

  8. 38个Pandas实用技巧

    1.计算变量缺失率 df=pd.read_csv('titanic_train.csv') def missing_cal(df):"""df :数据集return:每个 ...

  9. python实用技巧(四)

    Python实用技巧(一) python实用技巧(二) python实用技巧(三) python实用技巧(四) 排序后,最后k个元素,以逆序输出 >>> l = range(1, 6 ...

最新文章

  1. rabbit-mq cluster安装
  2. 为什么大家都说 SELECT * 效率低?
  3. python中直方图-Numpy,Python中的“拉伸”直方图(级别)
  4. 最小编辑代价-golang
  5. UVA 12716 GCD XOR(数论+枚举+打表)
  6. mybatis生成工具
  7. 新款iPhone SE预约量超40万,拼多多已经安排上,击穿底价2999元?
  8. Swift 可选(Optionals)类型
  9. [FJWC2018]欧拉函数
  10. forrtl: error (200): program aborting due to control-C event
  11. Python 英文转中文
  12. 给ESXi虚拟机硬盘瘦身
  13. wc,这进度条好快,不行我也得展示一下——python教你各种方法无障碍实现进度条
  14. 怎样设定目标(三)—— 目标设定前的准备
  15. 武汉大学《GNSS、INS和激光雷达的紧密耦合预积分,用于城市环境中的车辆导航》
  16. 微软需要Twitter来对抗Google
  17. 网络通信详解-深入浅出
  18. mysql截取字符串后缀_Mysql字符串截取函数SUBSTRING的用法说明
  19. linux 批量删掉进程
  20. 暗时间(普通的一种时间概念)

热门文章

  1. 前端笔试题【1】--从字符串的第二个字符开始对数组进行排序
  2. qmake常用语法三
  3. 《redis-php中文参考手册》-php版
  4. MY-SQL常用命令
  5. 零基础带你学习MySQL—Insert语句以及注意事项(七)
  6. 公司技术部的罗强月薪10000,要跳槽
  7. PowerPoint什么意思
  8. 5G网络出来以后,家里面的宽带还有存在的必要吗?
  9. 事业单位的到手工资不高,甚至有点低,为什么这么多人去考?
  10. 真正好的东西,就会脱颖而出