Auto-initialisation de variable non initialisée : risques et normes
L'extrait de code C/C ci-dessous :
int i = i;
a suscité des inquiétudes parmi les développeurs, car il utilise une variable non initialisée pour s'initialiser. Les compilateurs modernes acceptent ce code sans avertissement, soulevant des questions sur sa légalité et le comportement sous-jacent défini par les normes.
Acceptation et normes du compilateur
Selon la norme C11, une variable non initialisée a une valeur indéterminée, qui peut être une valeur non spécifiée ou une représentation piège. Dans les situations où la valeur indéterminée s'avère être une valeur piège, son utilisation peut conduire à un comportement indéfini si l'implémentation prend en charge les bits de remplissage en nombres entiers.
Cependant, si l'implémentation n'utilise pas de remplissage, la valeur n'est pas spécifiée, et il n'y a pas de comportement indéfini.
Le scénario non défini
Le comportement de l'utilisation d'une variable non initialisée pour l'auto-initialisation devient encore plus imprévisible si l'adresse de la variable n'est jamais prise . La section 6.3.2.1p2 de la norme C11 précise qu'une telle utilisation n'est pas définie pour les objets de durée de stockage automatique qui auraient pu être déclarés avec la classe de stockage de registre.
Implications
Malgré l'acceptation du compilateur, l'utilisation de variables non initialisées pour l'auto-initialisation n'est pas une pratique recommandée. Cela peut conduire à un comportement erroné ou à un comportement potentiellement indéfini en fonction de l'implémentation, rendant le code peu fiable. Initialisez toujours les variables explicitement pour éviter ces pièges.
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!