今天看项目源码的时候发现有些地方用了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 ;
}

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

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

最新文章

  1. ASP.NET Core中的依赖注入(4): 构造函数的选择与服务生命周期管理
  2. ORACLE中创建和删除临时表
  3. Cadence Allegro小技巧-从外部文本文件添加文本
  4. 如何在mysql命令窗口获取到程序正在执行的sql语句
  5. JavaScript解析机制
  6. 动态规划(背包问题):POJ 1742 Coins
  7. c语言结构体2之变量赋值于字符串
  8. [置顶] 【cocos2d-x入门实战】微信飞机大战之十二:分数的本地存储
  9. Delphi 技巧改造HINT的输出方式
  10. Python学习笔记(四)Python函数的参数
  11. dyld: Symbol not found: _OBJC_CLASS_$_UIBlurEffect
  12. Linux 用户身份与进程权限
  13. django by example 第四章 dashboard处html无法渲染问题
  14. js模拟浏览器加载效果 pace.js 中文官方文档
  15. 电影编码JPEG2000与H.264
  16. C#快速读写文件
  17. Atitit 找人软福利建设 技术团队建设大概流程
  18. Java基础--深克隆补充
  19. window.name跨域实现
  20. lazy-mock ,一个生成后端模拟数据的懒人工具

热门文章

  1. 关于int,long,long long
  2. 安卓仿微信Tab页用Fragment实现
  3. 移动表格行 解决低版本IE fadeIn fadeOut 失效问题
  4. Spring 源码从github导入源码到idea2016
  5. 使用Java字节流拷贝文件
  6. luagd介绍
  7. tcp protocol number
  8. Hosts简单说明
  9. axure rp pro 7.0(页面原型工具)
  10. paper 108:系统学习数字图像处理之图像复原与重建