大家好=) 我有点好奇 如果我有以下函数,则关闭调用sys.exit的程序:
void stop(int state){
std::exit(state);
}
现在,我想调用此函数,但不退出程序。 所以,我想“捕获”std :: exit命令......是否有方法可以做到这一点?
答案 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
后,此函数将永远不会执行任何操作,但也可能根本不会调用它,例如在评估其他函数中的任何内容后决定。