在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
阻止的含义是什么?
答案 0 :(得分:5)
CC_BREAK_IF
是if(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
语句仅适用于选择的上下文:while
,do
/ while
或for
循环或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
。