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

Je suis confus quand est-ce que je devrais append le _t fin aux types typedef ‘ed?

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, dois-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.

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

Je méprise personnellement la convention. Tant que vous êtes cohérent, cela n’a pas vraiment d’importance.

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

Quand faut-il utiliser _t ? Jamais? Il est réservé par une norme majeure (POSIX) et même si ce n’est pas le cas maintenant, votre code pourrait un jour être utilisé dans un environnement POSIX, donc l’utilisation de _t est une mauvaise idée.

J’irais même plus loin en disant que la typedef de la typedef est mauvaise en général. Si votre type est une struct , une union ou une enum , utilisez ces mots-clés lorsque vous déclarez des variables, ce qui rend votre code plus clair. L’utilisation de typedef est mieux réservée lorsque vous souhaitez rendre le type sous-jacent invisible à des fins d’abstraction / encapsulation. Quelques exemples size_t du standard C sont size_t , int32_t , mbstate_t et le stdio FILE .

Parmi les pires abus de typedef citons l’API Windows ( WORD , DWORD , INT , LPSTR etc.) et la gint ( gint , gchar , etc.). Faire des doublons des types C standard avec le même usage prévu n’est que déroutant et sert à verrouiller les développeurs dans votre bibliothèque / plate-forme en polluant tout le code avec ces noms de type non standard.

J’utilise des suffixes pour augmenter la lisibilité: _t pour typedef, et _e pour les énumérations depuis 25/30 ans … parfois j’utilise _st quand typedef définit une structure.

Je pense que c’est une bonne pratique pour que le code soit lisible et standardisé, alors je trouve juste d’utiliser des suffixes! De plus, à ce jour, je n’ai trouvé aucun document officiel POSIX indiquant que le suffixe _t est réservé.

L’ancien stdio.h contient _t … Voir: grep -i “_t;” stdio.h 🙂 Je pense que la norme POSIX est “un peu” plus jeune que C!

Choisissez les bons noms pour vos types, comme vous le feriez avec vos variables, fonctions et tout le rest. Un nom correct ne contient pas d’informations redondantes, ce qui rend la lecture du code plus difficile – _t ne vous aide jamais si vous avez un bon nom.

À propos: typedef image image; n’a aucun sens, car il ne fait que créer un typedef pour l’image.

_t suffixe _t pour les énumérations et les types primitifs pour les distinguer des variables. Je les mets dans les espaces de noms, donc je me _t réservations.

Pour le justifier. Très souvent, le nom de la variable est une allusion au type typedefed. Comme std::size_t size; , array_t array etc J’ai trouvé qu’il est plus facile de choisir un nom décent pour une variable, quand type contient le suffixe _t . Cela me rappelle également qu’il s’agit d’une primitive de type typé et non d’une autre classe de type bête par exemple.