Как я могу использовать функцию goto для разных функций. Например,
main()
{
....
REACH:
......
}
void function()
{
goto REACH ;
}
Как реализовать такое использование?
Как я могу использовать функцию goto для разных функций. Например,
main()
{
....
REACH:
......
}
void function()
{
goto REACH ;
}
Как реализовать такое использование?
Вы не можете в стандартном С++. От $6.6.4/1 стандарта языка С++
Оператор goto безоговорочно передает управление выражению, обозначенному идентификатором. Идентификатор должен быть меткой (6.1), расположенной в текущей функции.
... или в стандарте C. От $6.8.6.1/1 стандарта языка C
Идентификатор в инструкции goto должен обозначать метку, расположенную где-то в прилагаемой функция. Оператор goto не должен выходить за пределы идентификатора, имеющего измененный тип для внутри этого идентификатора.
Вы не можете в стандарте C; метки локальны для одной функции.
Ближайшим стандартным эквивалентом является setjmp()
и
longjmp()
пара функций.
GCC имеет расширения для поддержки ярлыков в целом.
Для 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
Ты не можешь Подумай об этом. Существует функция A, которая рекурсивно вызывает другую функцию B, которая, в свою очередь, вызывает A. Теперь предположим, что вы поместили оператор goto из A в B. Теперь возникает вопрос, к какому экземпляру A вы хотите перейти, который не определен,
#include "bits/stdc++.h"
int i=0;
A(){
run:
B();
}
B(){
if(i==10)
goto run;
i++;
A();
}