2010-12-10 1 views
1

こんにちは=) をキャッチこの関数は、プログラムを終了することなく終了します。 だから、私はstd :: exitコマンドを "キャッチ"したいと思います...それを行う方法はありますか?はsys.exitを呼び出すプログラムを閉じ、次の機能を、きた私は場合、私は少し好奇心 をしたすべてのsys.exit

+0

「キャッチ」とはどういう意味ですか?それは例外ではない。終了を呼び出さないようにするコードを追加したい場合は、何とかそれを折り返すことはできませんか? – x13n

答えて

0

は末尾再帰と同じ操作を行います:問題の関数呼び出しが常にまったく発生し実行パスの最後の文で、またはしていない:

void stop(int state) 
{ 
    const bool exitReally = DecideWhetherToExit(); 
    if (exitReally) 
    std::exit(state); 
} 
この関数は、後に何かをすることはありません

std::exitを呼び出しても、それをまったく呼び出すことはできません。たとえば、別の関数で必要なものを評価した後に決定します。

1

exitが返されないことが保証されているため、これを行うことはできません。その結果、コンパイラはこれを利用して、exitの後に実行パスを持たないコードを生成することができます。 exitが何らかのハッカーによって戻ってくると、未定義の動作が発生します。したがって、標準的な方法はありません。

0

私が知る限り、exitに電話をかけることはできず、アプリケーションの終了をさらに防ぐことができません。

stopに別のパラメータを渡すだけで、exitを呼び出すことはできませんか?

など。

 
void stop(int state, bool exit) 
{ 
    if(exit) 
     std::exit(state); 
} 
関連する問題