#pragma init_seg
Remonter à Présentation des directives pragma - Index
Syntaxe (voir Pseudo-grammaire)
#pragma init_seg({ compiler | lib | user })
Description
Utilisez #pragma init_seg pour contrôler l'ordre dans lequel le code de démarrage est exécuté.
Le code marqué par #pragma init_seg(compiler) est exécuté avant le code marqué par #pragma init_seg(lib), et le code marqué par #pragma init_seg(lib) est exécuté avent le code marqué par #pragma init_seg(user).
Exemple
Supposons que vous avez un projet contenant les fichiers suivants :
| 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; |
Cette application affiche la sortie suivante (placez un point d'arrêt sur la ligne contenant l'instruction return de la fonction principale pour voir la sortie console) :
X ctor Y ctor
Ceci signifie que la variable globale x est initialisée avant la variable globale y. Pour changer l'ordre d'initialisation, il est nécessaire de permuter les options de la directive #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; |
Cette application affiche :
Y ctor X ctor