为什么使用do{}while(0)?
来源:互联网 发布:linux 的办公软件 编辑:程序博客网 时间:2024/04/26 18:00
最近学习Cocos2d-x,看到不少使用do{}while(0)的宏定义,如:
#define CC_SAFE_DELETE(p) do { delete (p); (p) = nullptr; } while(0)
这里使用do{}while(0)来确保语句块被执行一次,那么,能不能使用别的语法结构,完成这样的工作呢?
1、直接使用{}语句块
#define CC_SAFE_DELETE(p) { delete (p); (p) = nullptr; }
使用下面的代码:
if(p) CC_SAFE_DELETE(p);else ...
编译器会报错,因为代码实际上被替换为了
if(p) { delete (p); (p) = nullptr; };else ...注意这里的";"是另外的一行,第一个if语句是没有else子句的,接下来是一个空语句,然后是else,这个else没有对应的if语句,编译器报错。
使用if语句的时候,有一个需要注意的地方:即使是单行语句,也要使用{}括起来,以后维护代码的时候,不会因为在单行语句前面添加了某些代码,导致此单行语句溢出if控制块。
当然,如果直接使用CC_SAFE_DELETE宏,不在宏后面添加分号,可以解决这个问题:
if(p) CC_SAFE_DELETE(p)else ...但是,作为一名C++程序员,几乎会本能的在语句最后面添加上";"
2、使用if(1)语句块
#define CC_SAFE_DELETE(p) if(1) { delete (p); (p) = nullptr; } else {}
这样,显得代码比较臃肿。注意,后面的else是不能省略掉的,否则,在if-else嵌套语句时,也会出现问题。
这里需要注意的是,do{}while()语句需要添加";"。
使用do{}while(0),能够让开发者能够以最小的代价来使用库,库作者不需要对开发者有更高的编码要求,提高库代码的健壮性。
0 0
- 为什么使用do{...} while(0) ?
- 为什么使用do{}while(0)?
- 为什么在宏中使用do{...}while(0)结构
- 为什么要在宏中使用 do{...}while(0) (转)
- 为什么使用do{}while(0)来进行宏定义
- 宏函数为什么使用do{...}while{0}包起来
- do..while(0)使用
- 使用do{ } while(0);
- do{} while(0)的使用
- do while{0}的使用
- do{}while(0)的使用
- (英文)为什么Linux内核中,许多#defines都使用了 do { ... } while(0)?
- 宏定义为什么要使用do{……}while(0)形式
- 为什么宏定义总是要使用do-while语句呢?
- do{}while(0)的使用技巧
- 使用do{ } while(0)的好处
- do{}while(0)的使用(COPY)
- 宏定义中do while(0)使用
- 【学习记录】使用openSSL中的MD5库对字符串进行MD5加密
- Android KitKat 4.4 Wifi移植之Wifi driver
- Scripts:创建password profile例子example_create_profile_password_parameters.sql
- Coder类见 Java加密技术(一)
- Linux makefile教程 非常详细,且易懂
- 为什么使用do{}while(0)?
- 判断闰年的小技巧
- 信息家电嵌入式Linux路由器开发
- 百度中的多分享按钮
- JavaScript中的ActiveXObject对象
- SSH无法连接服务器
- 设计模式------随笔
- Scripts:创建物化视图例子example_create_materialized_view.sql
- RaceWeb介绍(3):将数据快速导入数据库