Ich weiß, dass globale Variablen in Deklarationsreihenfolge für die gleiche Kompilierungseinheit erstellt werden und die Erstellungsreihenfolge nicht zwischen mehreren Kompilierungseinheiten definiert ist.Wenn statische globale Variable in C++ erstellt werden
Ich habe vor einiger Zeit gelesen, dass globale Variablen erstellt werden, bevor irgendein Code aus der Übersetzungseinheit, in der sie definiert sind, aufgerufen wird. Ist das durch den Standard definiert?
Beispiel:
file1.cpp
int f1v1 = f1_1();
int f1v2 = f1_2();
void f1(){...}
int f1_1(){...}
int f1_2(){...}
file2.cpp
static int f2v1 = f2_1();
static int f2v2 = f2_2();
int f2_1(){...}
int f2_2(){...}
main.cpp
#include "file1.h"
#include "file2.h"
int main()
{
f1();
return 0;
}
Ist in diesem Fall von der Norm gewährleistet, dass f1_1()
heißt vor f1_2()
und vor f1()
? Wird vom Standard garantiert, dass f2_1()
und f2_2()
überhaupt aufgerufen werden, da keine in der Datei2.cpp definierte Funktion aufgerufen wird und f2v1
und f2v2
außerhalb der Datei2.cpp nicht sichtbar sind?
EDIT:
Ist das Verhalten von der Norm festgelegt, wenn file1.cpp in lib1 kompiliert und file2.cpp wird in lib2 zusammengestellt?
Sie können dies finden http://stackoverflow.com/questions/12321401/ dynamic-initialization nützlich – hmjd
Hinweis: ob 'static' oder nur die * linkage * der Variablen betrifft, ist ihre Initialisierung identisch. –
@MatthieuM. Ich wollte klarstellen, dass die Variablen nicht verwendet werden (Zugriff von anderem Ort) – Felics