此代码中do-while的含义

时间:2014-11-10 19:28:26

标签: c++ cocos2d-x nextpeer

tutorial of Nextpeer中,您可以看到此类代码:

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

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

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

    // return the scene
    return scene;
}

此代码中do-while阻止的含义是什么?

4 个答案:

答案 0 :(得分:5)

CC_BREAK_IFif(condition) break的宏。 (编辑:我已确认it is。)

这是用于结构化goto的习语:

do {
    if (!condition0) break;
    action0();
    if (!condition1) break;
    action1();
} while(0);

do...while(0);仅存在允许break语句跳过某段代码。

这类似于:

if (!condition0) goto end;
action0();
if (!condition1) goto end;
action1();
end:

除了避免使用goto。

使用这些习语中的任何一个都是为了避免嵌套if

if (condition0) {
    action0();
    if (condition1) {
        action1();
    }
}

答案 1 :(得分:2)

在C和C ++中,break语句仅适用于选择的上下文:whiledo / whilefor循环或switch 1}}陈述。如果满足条件,CC_BREAK_IF宏可能会执行break。这是一种处理C中异常/错误条件的简单方法(如果你愿意的话,这是一个穷人的异常处理)。

永不循环的do / while循环只是为break语句提供了一个上下文。

答案 2 :(得分:1)

意思是让CC_BREAK_IF语句正常工作,即打破循环并跳转到return scene;

答案 3 :(得分:0)

当您有多个条件语句时,这是一种常见的方法,否则会产生一系列if / else子句。相反,您使用单个迭代循环并使用break语句退出循环(CC_BREAK_IF可能是一个测试表达式的宏,如果为真,则break