do{} while(0)
cocos2d-x 里面看到比较怪的代码
CCScene* HelloWorld::scene()
{
CCScene * scene = NULL;
do
{
// 'scene' is an autorelease object
scene = CCScene::node();
CC_BREAK_IF(! scene);
// 'layer' is an autorelease object
HelloWorld *layer = HelloWorld::node();
CC_BREAK_IF(! layer);
// add layer as a child to scene
scene->addChild(layer);
} while (0);
// return the scene
return scene;
}
没理解 do while(0) 的好处
后来群里有人告诉说是为了使用break, 相当于是一个变相的goto。
这个小函数里确实体现不出优势, if(!scene) 直接return null就行了。
也许在比较大的函数体中会有用处吧。
详细参考: