プログラムはさまざまなステータスコードで終了することができます。
私は、このステータスコードに基づいて最終的なタスクを処理するすべての方法で、終了ハンドラをキャッチとしてバインドしたいと考えています。
終了ハンドラ内からステータスコードを送信することはできますか?
私が知る限り、No。この小さな例に示すようにstd :: on_exitがないのはなぜですか?
したがって、私は、ステータス値を取得することができません:
#include <iostream>
#include <cstdlib>
int Get_Return_Code(){
//can this be implemented?
return 0;
}
void Exit_Handler() {
// how do I get the return code
// from within the exit heandler?
auto return_code = Get_Return_Code(); //?
// I'd like to make decisions based on the return code
// while inside my exit handler
if (return_code == EXIT_SUCCESS){
std::cout << "perform exit successful tasks...\n";
}
else {
std::cout << "perform exit failure tasks...\n";
}
}
int main(int argc, char** argv)
{
//bind the exit handler routine
if (std::atexit(Exit_Handler)){
std::cerr << "Registration failed\n";
return EXIT_FAILURE;
}
//if an argument is passed, exit with success
//if no argument is passed, exit with failure
if (argc > 1){
std::cout << "exiting with success\n";
return EXIT_SUCCESS;
}
std::cout << "exiting with failure\n";
return EXIT_FAILURE;
}
は、C++はまだon_exitを含んでいない理由はありますか?
私はWindowsの世界での相互互換性について懸念しています。コードベースに関してで
:
これを行うための私の目標、メモリ管理を必要としません。私たちは既存のコードベースを持っています。どこにでもexitステートメントがあります。プログラムがエラーで終了すると、そのエラーコードが意味することをユーザーに表示したいと思います。私の考えでは、これは主要なリファクタリングのない最速のソリューションです。
不要なので、あなたは 'try/catch/finally'ブロックにコードをラップするだけで同じことができます。 exitハンドラは、言語が例外処理を持たない場合に必要です –
あなた自身で 'exit()'を実装し、標準ライブラリのバージョンをオーバーライドし、あなたが望むことを実行した後で '_exit()'を呼び出すことができます。数値コード。私はこれが素晴らしいアイデアであるかどうかはわかりませんが、本当に必要ならば、あなたが望むものを手に入れる方法かもしれません。 –
@PanagiotisKanavosちょうど 'try-catch'、C++では' finally'は必要ありません。 – juanchopanza