1、goto的label是会被顺序执行的
如下例所示,==================error也会被执行。
#include <iostream>
void test(bool flag)
{
if (flag)
{
printf("--------------- yes.\n");
}
else {
goto error;
}
error:
printf("================error.\n");
}
int main()
{
std::cout << "Hello World!\n";
test(true);
return 0;
}
2、通常情况下,goto如何被设计???
一般情况下,我们只有在执行goto语句时,才要去执行其对应的label;
其他情况下我们无需执行label标签下的语句
。
如上例所示,我们应该将其设计为 当flag为true时,执行完对应的操作,然后直接返回,避免去执行后续的label标签
,这才是一个合理的流程。修改代码如下所示:
// ...
if (flag)
{
printf("--------------- yes.\n");
return; // 直接return, 避免继续执行后续的label语句
}
// ...