2010-02-16 7 views

Répondre

1

Les objets ne sont jamais partiellement initialisés en C - si vous avez utilisé un initialiseur, l'objet entier est garanti initialisé (dans ce cas, l'objet est l'ensemble des 20 tableaux de 30 caractères chacun). Tous les membres non explicitement initialisés sont initialisés récursivement à zéro (pour les types arithmétiques) ou NULL (pour les types de pointeurs).

La réponse, dans ce cas, est oui - tous les char s pas de valeurs explicitement données par le sont garantis initialiseur 0.

Ceci est décrit dans la norme C99 dans la section 6.7.8, Initialiser . Les paragraphes pertinents sont:

21 S'il y a moins initializers dans une liste fermée accolades que il y a éléments ou des membres d'un agrégat, ou moins de caractères dans une chaîne littérale utilisé pour initialiser un tableau de taille connue qu'il y a des éléments dans le tableau, le reste de l'agrégat doit être initialisé implicitement la même chose que les objets qui ont une durée de stockage statique.

et

10 Si un objet qui a une durée de stockage automatique n'est pas initialisé explicitement, sa valeur est indéterminée. Si un objet qui a la durée de stockage statique n'est pas explicitement initialisées, alors:

- si elle a type de pointeur, il est initialisé à un pointeur NULL;

- si elle a arithmétique de type , il est initialisé à (positive ou non signé) zéro;

- s'il s'agit d'un agrégat , chaque membre est initialisé (récursivement) selon ces règles ;

- si elle est un syndicat, le premier membre nommé est initialisé (récursive) selon ces règles.

Questions connexes