在不同的功能中使用Goto功能

时间:2013-06-28 04:30:36

标签: c++ c goto

如何在不同的函数中使用goto函数。例如,

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

    void function()
    {
    goto REACH ;
    }

如何实现这种用法?

4 个答案:

答案 0 :(得分:15)

你不能在标准C ++中。从$ 6.6.4 / 1的C ++语言标准

  

goto语句无条件地将控制权转移到标识符标记的语句。标识符应为位于当前函数中的标签(6.1)。

...或标准C.来自C语言标准的$ 6.8.6.1 / 1

  

goto语句中的标识符应命名位于封闭内容某处的标签   功能。 goto语句不得从具有标识符的范围之外跳转   在该标识符范围内的可变修改类型。

答案 1 :(得分:13)

你不能在标准C;标签是单个功能的本地标识。

最接近的标准等值是setjmp()longjmp()对功能。

GCC有extensions来更普遍地支持标签。

答案 2 :(得分:4)

对于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);
  }
}

请注意,这可能是未定义的行为

答案 3 :(得分:0)

不能。想想看。有一个函数A递归调用另一个函数B,而另一个函数B又调用了A。现在,假设您将goto语句从A放到B。现在的问题是,您想将A的哪个实例转到哪个未定义

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