do while(0)的妙用

发现cocos2d-x的函数中经常会用到do while(0)语句,一开始感觉比较奇怪,深研了下,原来这种方法很巧妙。

CCScene* HelloWorld::scene()
{
    CCScene * scene = NULL;
    do 
    {
        // 'scene' is an autorelease object
        scene = CCScene::create();
        CC_BREAK_IF(! scene);

        // 'layer' is an autorelease object
        HelloWorld *layer = HelloWorld::create();
        CC_BREAK_IF(! layer);

        // add layer as a child to scene
        scene->addChild(layer);
    } while (0);

    // return the scene
    return scene;
}

其中CC_BREAK_IF宏的声明如下:

#define CC_BREAK_IF(cond)            if(cond) break

以下的文章为do while(0)妙用的说明,我也转载一次:

http://www.cnblogs.com/flying_bat/archive/2008/01/18/1044693.html

 

posted @ 2013-05-08 14:13  netxfly  阅读(201)  评论(0)    收藏  举报