Почему GOTO разрешается прыгать в C в C, но не C ++?C++

Программы на C++. Форум разработчиков
Anonymous
Почему GOTO разрешается прыгать в C в C, но не C ++?

Сообщение Anonymous »

Рассмотрим этот код: < /p>

Код: Выделить всё

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, чтобы разрешить это?


Подробнее здесь: https://stackoverflow.com/questions/797 ... -but-not-c

Вернуться в «C++»