Maison > développement back-end > C++ > Comment C gère-t-il le fiasco des ordres d'initialisation statique dans un scénario avec des dépendances circulaires ?

Comment C gère-t-il le fiasco des ordres d'initialisation statique dans un scénario avec des dépendances circulaires ?

Patricia Arquette
Libérer: 2024-12-15 04:37:09
original
470 Les gens l'ont consulté

How Does C   Handle Static Initialization Order Fiasco in a Scenario with Circular Dependencies?

La perplexité du fiasco des ordres d'initialisation statiques

Dans le domaine du C, le « fiasco des ordres d'initialisation statiques » (SIOF) peut introduire des complexités dans la compréhension du code. L'exemple de code suivant illustre ce phénomène :

// file1.cpp
extern int y;
int x = y + 1;

// file2.cpp
extern int x;
int y = x + 1;
Copier après la connexion

Requête :

Cet extrait de code présente-t-il les caractéristiques suivantes ?

  1. Pendant compilation de file1.cpp, y n'est pas initialisé et aucun stockage ne lui est alloué.
  2. Dans file1.cpp, le stockage est alloué pour x, mais il n'est pas initialisé.
  3. Lors de la compilation de file2.cpp, le stockage est alloué pour y mais sans initialisation.
  4. Si file2.o est initialisé avant file1.o lors de la liaison, qu'arrive-t-il à x ? Reçoit-il une valeur par défaut de 0 ou reste-t-il non initialisé ?

Réponse :

Le standard C (3.6.2 "Initialisation des objets non locaux" ) donne un aperçu des étapes d'initialisation :

  1. Étape 1 : x et y sont initialisés à zéro avant toute autre initialisation.
  2. Étape 2 : La norme ne précise pas si x ou y reçoit en premier une initialisation dynamique. Cependant, l'autre variable recevra la valeur 1 en raison de l'initialisation nulle.
  3. Étape 3 : Une initialisation dynamique se produit pour la variable restante, ce qui donne une valeur de 2.

Par conséquent, la réponse à la requête 4 est que x reçoit une valeur par défaut de 0 lors de l'initialisation.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal