表示: Delphi
C++
表示設定
#pragma init_seg
提供:RAD Studio XE2
pragma 指令の概要:インデックス への移動
構文(「疑似文法」を参照)
#pragma init_seg({ compiler | lib | user })
説明
#pragma init_seg を使用すると、スタートアップ コードの実行順序を制御できます。
#pragma init_seg(compiler) が指定されたコードは #pragma init_seg(lib) が指定されたコードよりも先に実行され、#pragma init_seg(lib) が指定されたコードは #pragma init_seg(user) が指定されたコードよりも先に実行されます。
例
以下のファイルを含むプロジェクトがあるとします。
| main.cpp | Unit1.cpp | Unit2.cpp |
|---|---|---|
#include <vcl.h> #include <tchar.h> int _tmain(int argc, _TCHAR* argv[]) { return 0; } |
#include <iostream> using namespace std; class X { public: X() { cout << "X ctor" << endl; } }; #pragma init_seg(lib) static X x; |
#include <iostream> using namespace std; class Y { public: Y() { cout << "Y ctor" << endl; } }; #pragma init_seg(user) static Y y; |
このアプリケーションでは、以下が表示されます(メイン関数の return 文の行にブレークポイントを置き、コンソール出力を確認します)。
X ctor Y ctor
これは、グローバル変数 x がグローバル変数 y よりも先に初期化されることを意味しています。 初期化の順序を変更するには、#pragma init_seg 指令オプションを入れ替える必要があります。
| main.cpp | Unit1.cpp | Unit2.cpp |
|---|---|---|
#include <vcl.h> #include <tchar.h> int _tmain(int argc, _TCHAR* argv[]) { return 0; } |
#include <iostream> using namespace std; class X { public: X() { cout << "X ctor" << endl; } }; #pragma init_seg(user) static X x; |
#include <iostream> using namespace std; class Y { public: Y() { cout << "Y ctor" << endl; } }; #pragma init_seg(lib) static Y y; |
このアプリケーションでは、以下が表示されます。
Y ctor X ctor