Allons à la online C standard (draft n1256):
6.2.5 Types
1 La signification d'une valeur stockée dans un objet ou retourné par une fonction est déterminée par le
tapez de l'expression utilisée pour y accéder. (Un identificateur déclaré être un objet est l'expression la plus simple, le type est spécifié dans la déclaration de l'identificateur.) Les types sont divisés en
types d'objet (types qui décrivent complètement les objets),
types de fonctions (types qui décrivent fonctions), et
types incomplets (types qui décrivent des objets mais manquent d'informations nécessaires pour déterminer leur taille).
Exemples de incomplètes types:
struct f; // introduces struct f tag, but no struct definition
int a[]; // introduces a as an array but with no defined size
Vous ne pouvez pas créer des instances de types incomplets, mais vous peut créer des pointeurs et typedef noms de types incomplets:
struct f *foo;
typedef struct f Ftype;
Pour activer la structure incomplète dans un type d'objet, nous devons définir la structure:
C99 utilise le type de référence _? Vraiment? (Si vous avez la spécification C99 disponible, la section 6.2.5 traite en profondeur du système de type C. Elle commence par les définitions des trois catégories de types de niveau supérieur: types d'objet, types de fonction et types incomplets) –
Mon erreur, ça ne marche pas t. Je vais retirer cela de la question. Merci pour la capture! –
C'est exactement la section dont je parlais, mais je n'ai pas posté dans ma question. ;) 6.2.5 mentionne ces catégories de haut niveau, mais ne semble jamais dire «quoi» à l'intérieur d'eux. Types de fonctions est facile à comprendre, mais je suis encore confus en ce qui concerne les différences entre le type incomplet et le type d'objet.Pour les types incomplets, "types qui décrivent les objets mais manquent d'informations nécessaires pour déterminer leur taille" - qu'est-ce qu'un exemple de quelque chose qui manque d'informations nécessaires pour déterminer sa taille? –