如何goto
跨不同的功能使用?例如:
int main() {
// ....
REACH:
// ....
}
void function() {
goto REACH;
}
你不能在标准 C++ 中。C++ 语言标准 $6.6.4/1 起
goto 语句无条件地将控制转移到由标识符标记的语句。标识符应是位于当前功能中的标签(6.1)。
...或在标准 C 中。从 C 语言标准的 $6.8.6.1/1
goto 语句中的标识符应命名位于封闭函数某处的标签。goto 语句不应从具有可变修改类型的标识符范围之外跳转到该标识符范围内。
对于 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);
}
}
请注意,这可能是未定义的行为
你不能。想想这个。有一个函数 A 递归调用另一个函数 B,而 B 又调用 A。现在,假设您将 goto 语句从 A 放到 B。现在的问题是您要转到 A 的哪个实例,哪个未定义. 此外,如果没有定义 A 的先前实例,则您会遇到更大的问题,即函数中没有标签之前存在的初始化变量。
#include "bits/stdc++.h"
int i=0;
A(){
run:
B();
}
B(){
if(i==10)
goto run;
i++;
A();
}