Valeurs d’initialisation automatique de la structure, initialisations de tableaux

Si je devais avoir deux structures

typedef struct { int number_of_lines; char lines[MAX_CHAPTER_LINES][MAX_STR_SIZE + 1]; } Chapter; typedef struct { char name[MAX_STR_SIZE + 1]; int number_of_chapters; Chapter chapters[MAX_CHAPTERS]; } Book; 

Et j’ai créé une variable de chapitre:

 Chapter x1; 

À quoi les valeurs de ses deux membres seraient-elles initialisées? Est-ce des ordures? Ou est-ce zéro? Dans mon code, j’ai 0 pour l’ int , mais mon TA m’a dit que ce serait des ordures?

Aussi, si je déclarais un tableau de chapitres:

 Chapter chapters[30]; 

Serait-il rempli de 30 structures avec des éléments valorisés 0 / NULL ? Ou initialisé avec des éléments de valeur poubelle?

Ça dépend. Sauf initialisation explicite,

  • Si la variable a une durée de stockage statique (ou thread), les membres seront initialisés à 0 ou équivalent.

  • Dans le cas où la durée de stockage est automatique, le contenu sera laissé indéterminé (oui, “indéterminé” est plus approprié que “garbage” ).

Citant C11 , chapitre §7.7.9 / p10

Si un object ayant une durée de stockage automatique n’est pas initialisé explicitement, sa valeur est indéterminée. Si un object ayant une durée de stockage statique ou de thread n’est pas explicitement initialisé, alors:

– s’il est de type pointeur, il est initialisé à un pointeur nul;

– s’il est de type arithmétique, il est initialisé à zéro (positif ou non signé);

– s’il s’agit d’un agrégat, chaque membre est initialisé (récursivement) conformément à ces règles et tout remplissage est initialisé à zéro bit;

– s’il s’agit d’une union, le premier membre nommé est initialisé (récursivement) conformément à ces règles et tout remplissage est initialisé à zéro bit;