#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