Использование функции Goto для разных функций

Как я могу использовать функцию goto для разных функций. Например,

    main()
    {
      ....
      REACH:
      ......
    }

    void function()
    {
    goto REACH ;
    }

Как реализовать такое использование?

Ответ 1

Вы не можете в стандартном С++. От $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 вы хотите перейти, который не определен,

#include "bits/stdc++.h"
int i=0;
A(){
run:
    B();
}
B(){
if(i==10)
    goto run;
i++;
A();
}