如何在不同的函数中使用goto函数。例如,
main()
{
....
REACH:
......
}
void function()
{
goto REACH ;
}
如何实现这种用法?
答案 0 :(得分:15)
你不能在标准C ++中。从$ 6.6.4 / 1的C ++语言标准
goto语句无条件地将控制权转移到标识符标记的语句。标识符应为位于当前函数中的标签(6.1)。
...或标准C.来自C语言标准的$ 6.8.6.1 / 1
goto语句中的标识符应命名位于封闭内容某处的标签 功能。 goto语句不得从具有标识符的范围之外跳转 在该标识符范围内的可变修改类型。
答案 1 :(得分:13)
答案 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();
}