VC++およびGCCでは、main
はプログラムの実際のエントリポイントではありません。コンパイラの引数-ENTRY
と-Wl,-eentry
によってプログラムの実際のエントリポイントをリセットすることができます。グローバル変数のctorの前に関数が確実に実行されるようにする方法はありますか?
たとえば、実際のエントリpiontはVC++ではmainCRTStartup
です。つまり、mainCRTStartup
はmain
の前に呼び出されます。
私の質問は:私のプログラムにいくつかのグローバルC++変数がある場合、mainCRTStartup
が終了するまで初期化しないことを保証していますか?
問題の背景:
私はそのグローバル変数 ctorsのバグを持っているクローズドソースのフレームワークを、持っています。固定コードが グローバル変数ctorsの前に実行できる場合は、バグを修正できます。
グローバル変数は* mainecTStartupで初期化されます。それは 'main'を呼び出す前に実行するタスクの1つです。 'mainCRTStartup'は決して実際には終了しません。' main'が返ってきたら 'exit()'を呼び出します。 –