/ / Initialisation de variable dans différentes unités de traduction - c ++, initialisation

Initialisation des variables dans différentes unités de traduction - c ++, initialisation

Supposons que nous ayons deux unités de traduction:

//--a.cpp--//

int a;
int b;
int c;

int main(){ }

//--b.cpp--//


int d;
int e;
int f;

Ce programme ne démarre pas de fil. D'où (3.6.2 / 2)

l'initialisation d'une variable est séquencée de manière indéterminée avec par rapport à l’initialisation d’une variable définie dans un autre unité de traduction.

Cela signifie-t-il qu’après l’initialisation de toutes les variables d’une unité de traduction (par exemple, b.cpp), l’implémentation commence à initialiser la variable dans une autre unité de traduction (a.cpp)?

Réponses:

1 pour la réponse № 1

L’initialisation des globales dans une unité de traduction est dans l’ordre de définition, donc a, b, c et d, e, f.

Mais ce n'est pas précisé si c'est a, b, c et alors d, e, f ou si c'est l'inverse.

Ou même dans un ordre entrelacé (par exemple, a, d, b, c, e, f), bien que je pense que la plupart des implémentationsinitialisera toutes les variables globales d’une unité de traduction sur une seule ligne. Par conséquent, mis à part le multithreading, je ne pense pas que cela se produira dans la pratique.


0 pour la réponse № 2

Non, séquence indéterminée signifie qu'ilsse produire dans un certain ordre, mais cet ordre n'est pas spécifié. Les variables d'une unité de traduction seront initialisées avant ou après les variables de l'autre.