Vous voulez dire sans doute ceci:
typedef struct ST {
/* fields omitted */
} *STP;
L'astérisque est à la fin de l'instruction. Cela signifie simplement "définir le type STP comme un pointeur vers une structure de ce type". La balise struct (ST
) n'est pas nécessaire, elle n'est utile que si vous voulez pouvoir vous référer au type struct par lui-même, plus tard.
Vous pouvez aussi avoir les deux, comme ceci:
typedef struct {
/* fields omitted */
} ST, *STP;
Cela permettrait d'utiliser ST
pour désigner le type struct lui-même, et STP
pour les pointeurs de ST
. Personnellement, je trouve très mauvais d'inclure l'astérisque dans typedefs, puisqu'il essaye d'encoder quelque chose (le fait que le type est un pointeur) dans le nom du type, alors que C fournit déjà son propre mécanisme (l'astérisque) pour le montrer. Cela le rend très confus et rompt la symétrie de l'astérisque, qui apparaît à la fois dans la déclaration et l'utilisation de pointeurs.
L'astérisque est-il vraiment un astérisque dans le code source? Ou juste un joker? – kennytm
Prenez-le en tant que wildcard s'il vous plaît. Pour une raison quelconque, je me souviens d'un astérisque, mais cela ne compile pas. – Dor
Voulez-vous dire 'struct _st' au lieu de' struct * st'? – Artelius