int foo() {
goto lbl;
int a = 4;
lbl:
return 5;
}
< /code>
С GCC 12, это совсем хорошо, как C, даже не предупреждение. Однако, если я попытаюсь скомпилировать его как C ++, я получаю эту ошибку (и аналогичную для Clang): < /p>
main.cpp: In function ‘int foo()’:
main.cpp:4:1: error: jump to label ‘lbl’
4 | lbl:
| ^~~
main.cpp:2:10: note: from here
2 | goto lbl;
| ^~~
main.cpp:3:9: note: crosses initialization of ‘int a’
3 | int a = 4;
| ^
Почему это только ошибка в C ++, и есть ли способ сказать GCC/Clang, чтобы разрешить это?
Рассмотрим этот код: < /p> [code]int foo() { goto lbl; int a = 4; lbl: return 5; } < /code> С GCC 12, это совсем хорошо, как C, даже не предупреждение. Однако, если я попытаюсь скомпилировать его как C ++, я получаю эту ошибку (и аналогичную для Clang): < /p> main.cpp: In function ‘int foo()’: main.cpp:4:1: error: jump to label ‘lbl’ 4 | lbl: | ^~~ main.cpp:2:10: note: from here 2 | goto lbl; | ^~~ main.cpp:3:9: note: crosses initialization of ‘int a’ 3 | int a = 4; | ^ [/code] Почему это только ошибка в C ++, и есть ли способ сказать GCC/Clang, чтобы разрешить это?