Problème dans la définition d’un object d’une structure à l’intérieur de lui-même

Cela marche:

struct LD__32 { struct LD__32 *ld; }; 

Mais cela ne veut pas:

 struct LD_32 { struct LD_32 ld; }; 

Pourquoi est-ce? Je le compilais en tant que code c ++ comme l’a supposé pmg. édité

Une structure en C ne peut pas contenir un membre avec un type incomplet.

Dans ce dernier cas, vous ne pouvez pas avoir LD_32 ld; défini dans la définition LD_32 car la structure LD_32 n’est pas déjà définie à ce stade.

Vérifiez les constaints sur la structure en C

Section 6.7.2.1/2

Une structure ou une union ne doit pas contenir un membre avec un type de fonction ou incomplet (par conséquent, une structure ne doit pas contenir une instance de lui-même, mais peut contenir un pointeur sur une instance de celle-ci) , sauf que le dernier membre d’une structure avec plus de un membre nommé peut avoir un type de tableau incomplet; une telle structure (et toute union contenant, éventuellement, de manière récursive, un membre qui est une telle structure) ne doit pas être un membre d’une structure ou un élément d’un tableau.

Parce que c’est une définition récursive et infinie. Penses-y.

Penser à

 sizeof(struct LD_32) 
 struct LD_32 { LD_32 ld; }; 

Dans cette situation, comment le compilateur devrait-il déterminer la taille de la structure LD_32 ?

La taille d’une structure est déterminée en calculant la sum de la taille de tous les membres, plus du remplissage.

Ainsi, même s’il n’y a pas de remplissage, la taille de cette structure LD_32 serait égale à la taille de son membre, qui est LD_32 lui-même, cela signifie que

 sizeof(LD_32) = size of member { size(LD_32) = size of member { size(LD_32) = size of member { size(LD_32) = ... ... } } } } } } 

En bref, la taille ne peut pas être calculée car la taille dépend d’elle-même, ce qui est inconnu.

Donc, la taille est indéterminée.