从另一个源文件将控制权发送回我的c ++项目中的main.cc文件

时间:2014-08-12 07:37:53

标签: c++ controls goto

是否可以使用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**
}

1 个答案:

答案 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)。