从示波器跳转

Jumping from a scope

本文关键字:示波器      更新时间:2023-10-16

是否可以从未命名的范围跳转?

void MyFunc() {
{
... // Code
if (!head_size) {
goto _common_error; // <- break and continue don't work here
}
... // Code
if (!tail_size) {
goto _common_error; // second time
}
... // Code
}
_common_error:
{
... // Code
}
}

我的问题不是是否可以重新设计,而是 c++ 中是否有我不知道的技巧。

除了 goto 之外,c++ 中是否有一种机制可以跳出未命名的范围? 中断并继续在作用域中不起作用。

更新 1:将单词命名空间更改为范围

是的,您需要使用goto跳出范围。

break只能用于跳出环路或开关。

但是你可以通过使用虚拟循环来使用一个(有问题的(技巧:

void MyFunc() {
do {
... // Code
if (!head_size) {
break;
}
... // Code
if (!tail_size) {
break;
}
... // Code
} while (false);
{
... // Error handling code
}
}

使用宏魔法

#define BREAKABLE_SCOPE() for (char __scope = 0; __scope == 0; __scope++)

然后你可以做

int main()
{
// Will only print "Hello!"
BREAKABLE_SCOPE()
{
printf("Hello!");
break;
printf("Hello again!");
}
return 0;
}

请注意,宏会降低代码的可读性。