是否可以使用GOTO语句将控制从其他文件发送到主文件,如果是,请告诉。如果不可能,请告诉我另一种方法。
main.cc
{
outer: // label where I want to return
callingfunc()
//control go into calling func
}
source.cc //另一个带有类
的源文件class myclass
{
public:
callingfunc();
};
callingfunc()
{
some code
goto outer; //from here I want to send control to outer label in file **main.cc**
}
答案 0 :(得分:0)
在同一个函数中只能使用goto
个标签,并且在源文件中断开函数是非常糟糕的做法(仅当#include
d文件包含函数的第一部分时才有可能)。要传输执行,通常需要使用函数调用(无论是硬编码函数还是通过函数指针或std::function<>
标识的函数)和return
语句,有时是throw
和异常,以及非常非常罕见的像setjmp
/ longjmp
这样的事情(如果你需要问这个问题,你就不应该玩那些后面的功能)。您应该详细了解您的计划 - 最好发布一些代码 - 如果您需要有关适合您需求的具体建议。
更新:现在你发布了一些代码,你可以考虑这样的事情......
// source.h
enum Flow { Outer, Continue }; // whatever names make sense to you...
Flow callingfunc();
// main.cc
#include "source.h"
if (callingfunc(...) == Outer) goto outer;
// source.cc
#include "source.h"
Flow callingfunc() { ...; return Outer; ... return Continue; }
最好是尝试找到一个比“外面”更好的名字...这个内容可以传达callingfunc
找到的条件或者后续处理它的推荐(例如Timeout
,{{1} },Can_Retry
)。