cocos2dx中替代goto的用法:do{}while和CC_BREAK_IF

Posted KefeiGame

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cocos2dx中替代goto的用法:do{}while和CC_BREAK_IF相关的知识,希望对你有一定的参考价值。

 

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

 

          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) 就要出场了。

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

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

以上是关于cocos2dx中替代goto的用法:do{}while和CC_BREAK_IF的主要内容,如果未能解决你的问题,请参考以下文章

Goto语句

C语言32个关键字

c语言中的do while语句怎样理解

20160329 -- for/while/do while/goto/ 递归

C语言中goto语句的用法??举例来说。

goto