1

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这段代码中的block是什么意思?

4

4 回答 4

5

CC_BREAK_IF是一个宏if(condition) break(编辑:我已经确认它是。)

这是用于结构化 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();
    }
}
于 2014-11-10T19:34:35.740 回答
2

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

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

于 2014-11-10T19:41:20.943 回答
1

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

于 2014-11-10T19:31:47.723 回答
0

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

于 2014-11-10T19:33:17.160 回答