Почему 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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