Initialisation partielle des structures et tableaux automatiques en C et C
L'idée fausse découle de l'hypothèse erronée selon laquelle l'initialisation partielle des structures et tableaux automatiques est autorisé en C. Contrairement à cette croyance, les standards ne définissent explicitement que deux cas : initialisation complète ou pas d'initialisation. initialisation.
Initialisation partielle
Le terme « initialisation partielle » n'est pas défini dans les normes. Il fait référence à l'initialisation d'un seul sous-ensemble de membres dans une structure ou un tableau.
Initialisation complète
L'initialisation complète se produit lorsque tous les membres d'une structure ou d'un tableau sont explicitement initialisés. Par exemple :
struct somestruct { int a; int b; int c; }; somestruct s = {1, 2, 3};
Aucune initialisation
Lorsqu'aucune initialisation n'est fournie, le comportement dépend du type de stockage de la variable :
Partiel Initialisation en pratique
Bien qu'il ne s'agisse pas d'un comportement standard, l'initialisation partielle de la structure automatique et des membres du tableau est prise en charge par la plupart compilateurs, notamment Visual Studio et gcc/g .
Standard C (C99)
Section 6.7.8.21 Initialisation
Si moins d'initialiseurs sont fournis que le nombre d'éléments ou de membres dans un agrégat, les éléments restants sont initialisés à 0.
Standard C (C 03)
Section 8.5.1 Agrégats
Si moins d'initialiseurs sont présents, le les membres non initialisés sont initialisés par valeur. L'initialisation de la valeur diffère en fonction du type d'objet. Par exemple, les données membres non statiques d'un type de classe non-union sont initialisées par valeur, tandis que les types primitifs comme les entiers sont initialisés à zéro.
Conclusion
Partielle l'initialisation de structures et de tableaux automatiques est un comportement non standard qui peut conduire à des résultats indéfinis s'il n'est pas géré correctement. Pour garantir la portabilité et l'exactitude, assurez-vous toujours d'une initialisation complète ou d'aucune 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!