Почему не для чего? Для того, чтобы ответить на Ваше предположение, что goto ограничено одной функцией и показать, что "в действительности всё не так, как на самом деле"
Если мы возьмём пример из #54 и тупо прицепим его к пустому скетчу Спойлер: Пример_1 Код (C++): void setup() { // put your setup code here, to run once: } void loop() { // put your main code here, to run repeatedly: } int func_A(int a, int b) { if (a< 10) { int c = 0; c = b-a; if (c >20) goto label_1; } return (a); label_1: return (b); } Это безобразие скомпилируется без вопросов. Но если метку label_1 перенести за пределы функции Спойлер: Пример_2 Код (C++): void setup() { // put your setup code here, to run once: } void loop() { // put your main code here, to run repeatedly: label_1: } int func_A(int a, int b) { if (a< 10) { int c = 0; c = b-a; if (c >20) goto label_1; } return (a); return (b); } компилятор выдаст ошибку. Такой код со временем вызовет срыв стека.
Стало интересно - проверил в MS С v.6.0. Ни один из вышеуказанных вариантов не скомпилировался без ошибок. Вот Вам и реализация Opensource...
Дело не в реализации - это расширение языка, т.е. возможности, которых нет в стандарте. Borland C++ (Rad Studio 10.2.3) тоже не Open Source, но такие вещи вполне компилирует. Вот здесь пример ещё смешнее есть.