Maison > développement back-end > C++ > Que se passe-t-il lors de la compilation et de la liaison dans le fiasco de l'ordre d'initialisation statique C ?

Que se passe-t-il lors de la compilation et de la liaison dans le fiasco de l'ordre d'initialisation statique C ?

DDD
Libérer: 2024-12-11 01:00:10
original
769 Les gens l'ont consulté

What Happens During Compilation and Linking in the C   Static Initialization Order Fiasco?

Fiasco de l'ordre d'initialisation statique

Le « fiasco de l'ordre d'initialisation statique » (SIOF) fait référence à un problème potentiel qui peut survenir lors de l'utilisation de données statiques. membres dans les programmes C. Cette situation se produit lorsque plusieurs fichiers sources définissent des données membres statiques avec des dépendances circulaires.

Considérons l'exemple suivant :

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

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

Question :

Basé sur les extraits de code donnés, pouvez-vous expliquer les étapes suivantes qui peuvent se produire lors de la compilation et liaison ?

  1. Dans file1.cpp, le compilateur alloue-t-il du stockage et initialise y ?
  2. Dans file1.cpp, le compilateur alloue-t-il du stockage pour x ?
  3. Dans file2.cpp, le compilateur alloue-t-il du stockage et initialise-t-il x ?
  4. Dans file2.cpp, est-ce que le compilateur alloue de l'espace de stockage pour y ?
  5. Pendant la liaison, si file2.o est initialisé en premier, x est-il initialisé avec une valeur de 0 ?

Réponse :

Selon le standard C (3.6.2 "Initialisation des objets non locaux"), les étapes suivantes se produire :

  1. Étape 1 : initialisation à zéro : x et y sont initialisés à zéro avant toute autre initialisation.
  2. Étape 2 : dynamique Initialisation : La norme ne précise pas quelle variable (x ou y) est initialisée en premier. L'une d'elles sera initialisée avec une valeur de 1, car elle accède à la valeur initialisée à zéro de l'autre variable.
  3. Étape 3 : Initialisation dynamique de la deuxième variable : La variable restante sera initialisé dynamiquement, obtenant une valeur de 2.
  4. Par conséquent, la réponse à la cinquième question est non, x n'est pas initialisé avec une valeur de 0.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal