私は、まだ理解できていないという、かなり奇妙な出来事が起こっています。
エラーをキャッチしてメインから適切なエラーコードを返すことになっているテストケースがありますが、テストの実行時に/時々/は、エラーコードがゼロ以外の場合でもプログラムは0を返します。
スローされる例外クラスは次のとおりです。
class exit_request {
public:
explicit exit_request(int code = 0) : m_code(code) {}
int code() const { return m_code; }
private:
int m_code;
};
テストケースコードは次のとおりです。
int main(int argc, char* argv[])
{
try {
// Do some test case stuff
// Eventually, due to the supplied command line arguments,
// we expect an exit_request() to be thrown from within
// library code.
}
catch (exit_request& exp) {
std::cout << "Exit Request:" << exp.code() << std::endl;
return exp.code();
}
catch (std::exception& err) {
std::cout << "Error: " << err.what() << std::endl;
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
このテストケースの多くの実行では、すべてが期待どおりに機能します。exit_request()例外がスローされ、キャッチされ、exp.code()が出力され(値は2)、プロセスからの戻りコードは2です。
ただし、非常にまれに、exp.code()が2として出力されても、プロセスからの戻りコードが0(つまり失敗なし)になることがあります。
誰かがこれが発生する可能性のある状況を説明するのを手伝ってもらえますか?つまり、メインからの戻り値は、プロセスが終了する前にゼロ以外からゼロに変更されますか?
これは、MSVC ++ 2010Expressを搭載したWindows7(x64)で発生し、x86(32ビット)アプリケーションを構築します。他のWindowsまたはLinuxプラットフォーム、あるいはコンパイラーでこの奇妙な失敗は見たことがありませんが、それは必ずしもそれらの環境で発生しなかったことを意味するわけではありません。