zoukankan      html  css  js  c++  java
  • 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)。

  • 相关阅读:
    ACM-ICPC 2018 南京赛区网络预赛 G Lpl and Energy-saving Lamps(模拟+线段树)
    [转]Red Hat Linux相关产品iso镜像下载【百度云】
    VMware Workstation Pro 14 虚拟机安装教程
    POJ
    HDU
    HDU
    HDU
    HDU
    1087 有多少不同的值 (20 分)
    1088 三人行 (20 分)
  • 原文地址:https://www.cnblogs.com/kefeiGame/p/7353650.html
Copyright © 2011-2022 走看看