#pragma init_seg

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Pragma-Direktiven (Übersicht) - Index

Syntax (siehe Pseudogrammatik)

#pragma init_seg({ compiler | lib | user })

Beschreibung

Mit #pragma init_seg steuern Sie die Reihenfolge, in der Startcode ausgeführt wird.

#pragma init_seg(compiler)-Code wird vor #pragma init_seg(lib)-Code und #pragma init_seg(lib)-Code vor #pragma init_seg(user)-Code ausgeführt.

Beispiel

Angenommen, Ihr Projekt enthält die folgenden Dateien:

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;

Diese Anwendung zeigt Folgendes an (setzen Sie einen Haltepunkt in die Zeile mit der return-Anweisung der Funktion main, um die Konsolenausgabe zu sehen):

X ctor
Y ctor

Das bedeutet, dass die globale Variable x vor der globalen Variable y initialisiert wird. Zum Ändern der Initialisierungsreihenfolge müssen Sie die Optionen der Direktive #pragma init_seg austauschen:

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;

Diese Anwendung zeigt Folgendes an:

Y ctor
X ctor