2010-12-10 57 views
1

喜的=) 我有一点点好奇心 如果我下面的函数,即关闭程序调用sys.exit:追赶sys.exit

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

现在,我要打电话此功能,但不退出程序。 所以,我想“抓住”std :: exit命令......有没有一种方法可以做到这一点?

+0

“捕捉”是什么意思?这不是一个例外。如果你想添加一些防止调用退出的代码,你不能以某种方式包装它吗? – x13n 2010-12-10 10:31:03

回答

0

做同样与尾递归:有问题的函数调用总是在执行路径的最后一条语句,或者根本不发生:

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

此功能不会做任何后调用std::exit,但也可能根本不会调用它,例如,在对另一个函数中的任何内容进行评估后决定。

1

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

0

据我所知,你不能调用exit,然后进一步阻止应用程序终止。

你不能只传递另一个参数到stop,以便它不会调用exit

E.g.

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