48 votes

Si je fais un `typedef` en C ou C ++, quand dois-je ajouter` _t` à la fin du type typedef '?

Je suis confus quand dois-je ajouter les types de fin _t à typedef ?

Par exemple, devrais-je faire ceci:

 typedef struct image image_t;
 

ou ca:

 typedef struct image image;
 

Quelles sont les règles générales?

Un autre exemple, devrais-je faire ceci:

 typdef enum { ARRAY_CLOSED, ARRAY_OPEN, ARRAY_HALFOPEN } array_type_t;
 

ou ca:

 typdef enum { ARRAY_CLOSED, ARRAY_OPEN, ARRAY_HALFOPEN } array_type;
 

S'il te plaît, éclaire-moi.

Merci, Boda Cydo.

58voto

James McNellis Points 193607

Dans POSIX, les noms se terminant par _t sont réservés. Par conséquent, si vous ciblez un système POSIX (par exemple, Linux), vous ne devez pas terminer vos types avec _t .

17voto

Billy ONeal Points 50631

Personnellement, je méprise la convention _t . Tant que vous êtes cohérent, ce n'est pas grave, cependant.

Notez que (comme l’indiquent d’autres réponses données ici), si vous codez selon une autre norme, telle que POSIX, vous devez vérifier si elle est acceptable dans cette norme avant d’utiliser de tels noms.

7voto

R.. Points 93718

Quand faut utiliser _t? Jamais? Il est réservé par un grand standard (POSIX) et même si c'est pas maintenant, votre code pourrait un jour être utilisée dans un environnement POSIX, donc à l'aide d' _t est une mauvaise idée.

Je voudrais aller plus loin pour dire que l'utilisation excessive de l' typedef est mauvais en général. Si votre type est un struct, unionou enum, utiliser ces mots-clés lorsque vous déclarez des variables et il rend votre code plus clair. L'utilisation d' typedef est préférable de réserver pour quand vous voulez faire le type sous-jacent invisible pour l'abstraction/encapsulation fins. Quelques grands exemples de la norme C size_t, int32_t, mbstate_t, et la stdio FILE.

Certains des pires abus de typedef le sont par l'API Windows (WORD, DWORD, INT, LPSTR etc.) et glib (gint, gchar, etc.). Faire des doubles de la norme C types avec la même destiné à un usage uniquement à confusion et sert à verrouiller les développeurs dans votre bibliothèque/plate-forme en polluant tout le code avec ces non standard type de noms.

0voto

doc Points 2294

Je suis l'aide d' _t suffixe pour les énumérations et les types primitifs afin de les distinguer des variables. Je les ai mis dans des espaces de noms, donc je ne m'inquiète pas à propos de _t des réserves.

Pour le justifier. Très souvent, le nom de variable est une allusion à typedefed type. Comme std::size_t size;, array_t array etc. J'ai trouvé que c'est plus facile à ramasser décent nom pour une variable, lorsque le texte contient _t suffixe. Il me fait aussi penser que c'est un typedefed primitive et non pas une autre bête comme la classe, par exemple.

0voto

Clearer Points 369

Choisissez de bons noms pour vos types, comme vous le devriez avec vos variables, fonctions et toute autre chose. Un bon nom ne contient pas d'informations redondantes, ce qui rend plus difficile la lecture du code - _t ne vous aide jamais si vous avez un bon nom pour commencer.

Au fait: typedef image image; n'a pas de sens, car cela fait simplement de l'image une typedef.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X