#pragma init_seg

De RAD Studio
Aller à : navigation, rechercher

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