Cocos2D-x中关于do{}while(0)和CC_BREAK_IF的用法
2013-09-06 15:27
351 查看
看过cocos2d-x 自带demo的朋友相信很多人都会发现demo中用了很多do{}while(0)和CC_BREAK_IF宏.他们是做什么用的呢?
其实这个是c++中的一个技巧.
我们时常会调用某个函数来创建一个对象,但由于内存不足或其他异常情况发生时对象可能会创建失败,创建失败我们就要结束当前程序转到错误处理地方去处理错误或释放已生成的对象。
我们可以看到,代码中用了很多goto语句.c++中虽然有goto,但却是极力不推崇这么做.因为goto一旦滥用会令程序的运行琢磨不定,给开发带来很多不必要的麻烦.这时do{}while(0) 就要出场了。
对比上一段代码,这段代码是不是显得简洁了许多.而宏CC_BREAK_IF的作用就是代替if(!o1) break;这样的代码,所以上面if(!o1) break;这样的代码完全可以替代为CC_BREAK_IF(!o1)。
其实这个是c++中的一个技巧.
我们时常会调用某个函数来创建一个对象,但由于内存不足或其他异常情况发生时对象可能会创建失败,创建失败我们就要结束当前程序转到错误处理地方去处理错误或释放已生成的对象。
int* p1 = new int; CCObject* o1 = fun1(); if(!o1) goto catchcode; CCObject* o2 = fun2(); if(!o2) goto catchcode; //如果代码都执行成功 delete p; p = NULL; //如果o1 o2有发生错误 catchcode: delete p; p = NULL;
我们可以看到,代码中用了很多goto语句.c++中虽然有goto,但却是极力不推崇这么做.因为goto一旦滥用会令程序的运行琢磨不定,给开发带来很多不必要的麻烦.这时do{}while(0) 就要出场了。
int* p1 = new int; do { CCObject* o1 = fun1(); if(!o1) break; CCObject* o2 = fun2(); if(!o2) break; }while(0) delete p; p = NULL;
对比上一段代码,这段代码是不是显得简洁了许多.而宏CC_BREAK_IF的作用就是代替if(!o1) break;这样的代码,所以上面if(!o1) break;这样的代码完全可以替代为CC_BREAK_IF(!o1)。
相关文章推荐
- Cocos2D-x中关于do{}while(0)和CC_BREAK_IF的用法
- Cocos2D-x中关于do{}while(0)和CC_BREAK_IF的用法
- cocos2d-x系列笔记技巧篇(1)---关于do{}while(0)和CC_BREAK_IF的用法
- do{}while(0)与CC_BREAK_IF的绝妙搭配
- do{}while(0)与CC_BREAK_IF的绝妙搭配
- do{}while(0)与CC_BREAK_IF的绝妙搭配
- for,while,do...while,switch,break,continue,return的用法
- Cocos2d-x中关于do{} while(0) 的解释
- JavaSE (七)循环控制语句:while、do....while、for,break和continue用法
- 关于 do ....while() 的重要用法
- if,switch,while,do..while,for语句在JSP中的用法示例
- #define fun() do {a***; b***;} while(0)在if语句后的用法探讨
- 关于do.....while(0)的用法
- [置顶] 循环语句if(){}else{}、if(){}else if(){}...else{}、do{}while()、for(){}、with(){}break/continue语句
- C语言学习3:if ,for,do..while,continue和break,goto,swtich,输入输出缓存区,随机数产生
- C语言中流程控制语句(if,switch,for,while,do-while,continue,break,return)
- 流程控制:if...else,while..do,foreach,contiue,break;
- if ,swith,for,while,do/while,break,contine的简单说明
- 笔记:循环(for, if, do...while, break, switch)
- if/switch/while/do while/for/等循环及判断的简要用法案例