从范围跳转
Jumping from a scope
是否可以从未命名的范围跳转?
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++ 中是否有跳出未命名范围的机制? break 和 continue 在范围内不起作用。
更新 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;
}
请注意,宏会降低代码的可读性。
是否可以从未命名的范围跳转?
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++ 中是否有跳出未命名范围的机制? break 和 continue 在范围内不起作用。
更新 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;
}
请注意,宏会降低代码的可读性。