Cocos2D-x中关于do{}while(0)和CC_BREAK_IF的用法

出自:http://www.jb51.cc/article/p-ezfuqgpb-er.html


看过cocos2d-x 自带demo的朋友相信很多人都会发现demo中用了很多do{}while(0)和CC_BREAK_IF宏.他们是做什么用的呢?

  其实这个是c++中的一个技巧.

  我们时常会调用某个函数来创建一个对象,但由于内存不足或其他异常情况发生时对象可能会创建失败,创建失败我们就要结束当前程序转到错误处理地方去处理错误或释放已生成的对象。

 
1int*p1=newint;
2
3CCObject*o1=fun1();
4if(!o1)gotocatchcode;
5
6CCObject*o2=fun2();
7if(!o2)gotocatchcode;
8
9//如果代码都执行成功
10deletep;
11p=NULL;
12
13//如果o1o2有发生错误
14catchcode:
15deletep;
16p=NULL;

复制代码


  

  我们可以看到,代码中用了很多goto语句.c++中虽然有goto,但却是极力不推崇这么做.因为goto一旦滥用会令程序的运行琢磨不定,给开发带来很多不必要的麻烦.这时do{}while(0) 就要出场了。

  

复制代码

1int*p1=newint;
2
3do
4{
5CCObject*o1=fun1();
6if(!o1)break;
7
8CCObject*o2=fun2();
9if(!o2)break;
10}while(0)
11
12deletep;
13p=NULL;
14

复制代码

  对比上一段代码,这段代码是不是显得简洁了许多.而宏CC_BREAK_IF的作用就是代替if(!o1) break;这样的代码,所以上面if(!o1) break;这样的代码完全可以替代为CC_BREAK_IF(!o1)。

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...