捕获sys.exit

时间:2010-12-10 10:22:48

标签: c++

大家好=) 我有点好奇 如果我有以下函数,则关闭调用sys.exit的程序:

void stop(int state){
    std::exit(state);
}

现在,我想调用此函数,但不退出程序。 所以,我想“捕获”std :: exit命令......是否有方法可以做到这一点?

3 个答案:

答案 0 :(得分:1)

你不能这样做,因为exit保证永远不会返回。因此,编译器可以利用这一点并生成exit之后没有任何执行路径的代码。如果某个hackery返回exit,那么你将得到未定义的行为。所以没有标准的方法。

答案 1 :(得分:0)

据我所知,您无法调用exit,然后进一步阻止应用程序终止。

您是否可以将其他参数传递给stop,以便它不会调用exit

E.g。

void stop(int state, bool exit)
{
    if(exit)
        std::exit(state);
}

答案 2 :(得分:0)

与尾递归相同:让违规函数调用始终是执行路径中的最后一个语句,或者根本不发生:

void stop(int state)
{
  const bool exitReally = DecideWhetherToExit();
  if (exitReally)
    std::exit(state);
}

调用std::exit后,此函数将永远不会执行任何操作,但也可能根本不会调用它,例如在评估其他函数中的任何内容后决定。