0
votes

Spécifiez le nom de la structure dans TLECDEF STRIT

Quelle est la différence entre: xxx

et xxx

J'utilise la première approche, mais j'ai vu le second sur un répondre. Je veux juste définir le type et définir la variable avec ce type séparément.


5 commentaires

NB: Les identifiants de POSIX se terminent par _t .


@Alnitak qu'est-ce que cela signifie?


Cela signifie que si vous développez du code pour compiler sur une plate-forme compatible POSIX, vous devez utiliser ce suffixe pour vos propres noms de type.


Oups, je voulais dire "devrait pas "!


Je pensais littéralement que "pourquoi a-t-il mentionné que si je peux déjà l'utiliser pour mes propres noms de type" lol :) maintenant je l'obtient. Merci!


3 Réponses :


1
votes

La deuxième approche vous permet de renvoyer le type de structure. Donc, si nous traitons avec des en-têtes, vous pouvez éviter une inclusion transitive inutile. Par exemple, considérez ce petit en-tête: xxx

qui supprime la dépendance sur list_t S de la définition complète de tous les clients du client. Code qui doit utiliser uniquement la barre n'est pas obligé d'inclure la définition de list_t_t (par inclusion transitive).

Lorsque vous utilisez la première approche , vous créez un alias à un type de structure sans balise, vous ne pouvez donc pas l'avant de le déclarer. Et le code client est forcé d'inclure votre définition de type pour avoir accès à son nom.


0 commentaires

3
votes

La différence est utile pour les structures de données auto-référençant. xxx

Notez que le nom après struct n'est pas nécessairement identique à celui utilisé pour Typedef .


2 commentaires

merci +1 mais .. est struct est nécessaire dans struct exemple2 * PTR; ?


@snr OUI parce que, à ce stade de l'analyse ( PTR membre) par le compilateur, le type struct exemple2 est connu (partiellement, comme déclaration avant) mais pas le Tapez Exemple2 (Typedef); Ce dernier sera connu au dernier point-virgule.



2
votes

Il semble s'agir d'une matière de goût et de style de codification préféré, mais la deuxième manière (comme mentionné dans d'autres réponses) est utile pour les structures d'auto-références (par exemple la liste ou les structures de données d'arbres) et la déclaration à terme. Quant à moi, je préfère la deuxième manière en C et pense que c'est beaucoup plus commun.

Référence p>

in c: p> xxx pré>

Dans ce cas, il y a deux options: le premier est d'omettre les deux TYPEDEF CODE> et STRUT_NAME_T CODE>, auquel cas pour déclarer une structure, vous devez inclure réellement le mot clé code> struct p> xxx pré >

ou vous pouvez utiliser un typedef code> pour déclarer un type Struct_Name_T que vous pouvez utiliser: p> xxx pré>

dans les deux cas, si vous le souhaitez Déclarez un pointeur à une structure à l'intérieur de la structure, vous devez utiliser la première syntaxe, avec le mot-clé STRIT: P>

struct struct_name *struct_instance;


0 commentaires