• cocos2dx中替代goto的用法:do{}while(0)和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)。

  • 相关阅读:
    Java ListIterator(迭代器)
    java 异常 throw
    java iterator(迭代器)
    java list
    type Iterator does not take parameters
    Java 容器的打印
    java 添加一组元素
    Java 容器的基本概念
    软件
    java 学习网站
  • 原文地址:https://www.cnblogs.com/kefeiGame/p/7353650.html
Copyright © 2020-2023  润新知