Вы не можете в стандартном С++. От $6.6.4/1 стандарта языка С++
Оператор goto безоговорочно передает управление выражению, обозначенному идентификатором. Идентификатор должен быть меткой (6.1), расположенной в текущей функции.
... или в стандарте C. От $6.8.6.1/1 стандарта языка C
Идентификатор в инструкции goto должен обозначать метку, расположенную где-то в прилагаемой функция. Оператор goto не должен выходить за пределы идентификатора, имеющего измененный тип для внутри этого идентификатора.
Ответ 2
Вы не можете в стандарте C; метки локальны для одной функции.
Ближайшим стандартным эквивалентом является setjmp() и
longjmp() пара функций.
GCC имеет расширения для поддержки ярлыков в целом.
Ответ 3
Для gcc:
#include <iostream>
void func(void* target){
std::cout << "func" <<std::endl;
goto *target;
}
int main() {
void* target;
auto flag = true;
l:
std::cout << "label" <<std::endl;
target = &&l;
if (flag) {
flag = false;
func(target);
}
}
Обратите внимание, что это может быть поведение undefined
Ответ 4
Ты не можешь Подумай об этом. Существует функция A, которая рекурсивно вызывает другую функцию B, которая, в свою очередь, вызывает A. Теперь предположим, что вы поместили оператор goto из A в B. Теперь возникает вопрос, к какому экземпляру A вы хотите перейти, который не определен,