Using Goto function across different functions

早过忘川 提交于 2019-11-28 07:01:56

问题


How can I use goto function across different functions .For ex ,

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

    void function()
    {
    goto REACH ;
    }

How to implement such usage ?


回答1:


You can't in Standard C++. From $6.6.4/1 of the C++ Language Standard

The goto statement unconditionally transfers control to the statement labeled by the identifier. The identifier shall be a label (6.1) located in the current function.

...or in Standard C. From $6.8.6.1/1 of the C Language Standard

The identifier in a goto statement shall name a label located somewhere in the enclosing function. A goto statement shall not jump from outside the scope of an identifier having a variably modified type to inside the scope of that identifier.




回答2:


You can't in Standard C; labels are local to a single function.

The nearest standard equivalent is the setjmp() and longjmp() pair of functions.

GCC has extensions to support labels more generally.




回答3:


For 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);
  }
}

Note that this can be an undefined behavior




回答4:


You can't. Think of this. There is a function A which is recursively calling another function B which in turn is calling A. Now, suppose that you put a goto statement from A to B. The question now becomes which instance of A do you want to go to which is undefined.

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


来源:https://stackoverflow.com/questions/17357199/using-goto-function-across-different-functions

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!