この質問main
の多くの例で見られるように、が呼び出される前にコードを実行することは間違いなく可能です。
ただし、そのプリメイン コードで、プログラムがstd::exit
orを介して終了するように指示された場合はどうなるstd::abort
でしょうか。main
はプログラムの開始として定義されているため、開始前に終了するとどのような結果が生じるでしょうか?
各セクションで何かを印刷すると、次の結果が得られます。
フォーマット:
セクション:output
Main : main
Init (メインの前に呼び出される) : Exit ( Init 内init
で設定std::atexit
) :exiting
サンプルラン:
終了せずに呼び出される初期化:
初期化
メイン
は 0 を返します
初期呼び出し std::exit(0):
初期化
は 0 を返します
初期呼び出し std::abort:
init
がクラッシュし、Windows で GCC 4.7.2 が
クラッシュして 3 が返される VS11 で通常のボックスが表示され、LiveWorkSpace
で 0 が返される
Init はハンドラを設定し、std::exit(0) を呼び出します:
初期化
終了
は 0 を返します
Init はハンドラを設定し、std::abort を呼び出します:
ハンドラー
なしと同じ取引を開始する
検索中に、次の質問を見つけました: main() の前に C/C++ プログラムがクラッシュする方法はありますか? . しかし、それは私が知りたいことには答えません:この動作、呼び出しstd::exit
またはstd::abort
beforemain
は明確に定義されていますか この未定義の動作はありますか?