C では、メイン プロセスが終了したときに、 に登録されている関数を呼び出すことをどのように知るのatexit()
でしょうか
仕組みはわかりますatexit()
が、「メインプロセスの終了」と「atexit()
に登録されている関数の呼び出し」の間の通信がわかりません。少し冗長です。
ありがとう!
C では、このmain()
関数は、ランタイムに組み込まれている他の関数によって実際に呼び出されます。この関数は、main()
関数の終了後に、クリーンアップのためにさらにいくつかのことを行います。それらの 1 つは、に登録されている任意の関数を呼び出すことatexit()
です。この関数は、関数ポインタのある種の静的リストを実際に格納します。これは、 の後にランタイムによって呼び出されますmain()
。
C標準[PDFリンク](5.1.2.2.3)から:
関数への最初の呼び出しからの戻りは、関数によって返された値を引数として関数
main
を呼び出すことと同じです。メイン関数を終了するに到達すると、 の値が返されます。exit
main
}
0
exit
登録された関数を呼び出すのは、関数の責任ですatexit
(実行するすべての説明については、標準の 7.20.4.3 を参照してくださいexit
)。