加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 16:38:18 所属栏目:百科 来源:网络整理
导读:出自:http://www.jb51.cc/article/p-ezfuqgpb-er.html 看过cocos2d-x 自带demo的朋友相信很多人都会发现demo中用了很多do{}while(0)和CC_BREAK_IF宏.他们是做什么用的呢? 其实这个是c++中的一个技巧. 我们时常会调用某个函数来创建一个对象,但由于内存不足

出自:http://www.52php.cn/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)。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读