/ / Variable Initialisierung in verschiedenen Übersetzungseinheiten - C ++, Initialisierung

Variable Initialisierung in verschiedenen Übersetzungseinheiten - C ++, Initialisierung

Angenommen, wir haben zwei Übersetzungseinheiten:

//--a.cpp--//

int a;
int b;
int c;

int main(){ }

//--b.cpp--//


int d;
int e;
int f;

Dieses Programm startet keinen Thread. Daher (3.6.2 / 2)

Die Initialisierung einer Variablen ist unbestimmt sequenziert mit Bezug auf die Initialisierung einer Variablen in einem anderen definiert Übersetzungseinheit.

Bedeutet dies, dass nur nach der Initialisierung aller Variablen in einer Übersetzungseinheit (z.B. b.cpp) beginnt die Implementierung die Variable in einer anderen Übersetzungseinheit zu initialisieren (a.cpp)

Antworten:

1 für die Antwort № 1

Die Initialisierung von Globals in einer Übersetzungseinheit erfolgt in der Reihenfolge der Definition a, b, c und d, e, f.

Aber es ist nicht spezifiziert, wenn es ist a, b, c und dann d, e, f oder wenn es umgekehrt ist.

Oder sogar in verschachtelter Reihenfolge (sagen wir, a, d, b, c, e, f), obwohl ich denke, dass die meisten Implementierungenwird alle globalen Variablen von einer Übersetzungseinheit in einer einzigen Zeile initialisieren, also anders als beim Multithreading, denke ich nicht, dass dies in der Praxis passieren wird.


0 für die Antwort № 2

Nein, unbestimmt sequenziert bedeutet, dass siein einer bestimmten Reihenfolge auftreten, aber diese Reihenfolge ist nicht angegeben. Die Variablen in einer Übersetzungseinheit werden entweder vor oder nach den Variablen in der anderen initialisiert.