L' _t
habituellement encapsule une opaque de la définition de type.
GCC simplement ajouter des noms qui se terminent par _t
de la réserve de l'espace de noms que vous ne pouvez pas utiliser, pour éviter les conflits avec les futures versions de la Norme C et POSIX (bibliothèque C de GNU manuel). Après quelques recherches, j'ai enfin trouvé la référence exacte à l'intérieur de la Norme POSIX (1003.1, la Justification (Informative)):
B. 2.12 Types De Données
L'exigence que d'autres types définis dans cette section se termine par ‘_t" a été invité par le
problème de nom de l'espace de la pollution. Il est difficile de définir un type (où ce type n'est pas un
défini par la norme IEEE Std 1003.1-2001) dans un fichier d'en-tête et de l'utiliser dans un autre, sans l'ajout de symboles
pour l'espace de nom du programme. Pour permettre aux développeurs de fournir leurs propres types, tous
conforme applications sont nécessaires pour éviter les symboles se terminant en ‘_t", qui permet de la
fournisseur de fournir de nouveaux types. Parce qu'une plus grande utilisation de types est dans la définition de
la structure des membres, qui peuvent (et dans de nombreux cas, doit) être ajouté pour les structures définies dans
IEEE Std 1003.1-2001, la nécessité pour d'autres types est convaincante.
En un mot, la Norme dit qu'il y a de bonnes chances de l'extension de la Norme types de liste, par conséquent, la Norme limite l' _t
d'espace de noms pour son propre usage.
Par exemple, votre programme de matchs POSIX 1003.1 Questions 6 et que vous avez défini un type foo_t
. POSIX 1003.1 Questions 7 est finalement sorti avec un nouveau type défini par l' foo_t
. Votre programme ne correspond pas à la nouvelle version, qui pourrait être un problème. La restriction de l' _t
d'utilisation empêche de refactoriser le code. Ainsi, si vous visez à une POSIX conformité, vous devez absolument éviter l' _t
que la Norme précise.
Note: personnellement, j'essaie de coller à POSIX parce que je pense qu'il donne de bonnes bases pour le nettoyage de la programmation. Par ailleurs, je suis assez friand de Linux Style de Codage (chapitre 5) des lignes directrices. Il ya quelques bonnes raisons pour pourquoi ne pas utiliser typedef. Espérons que cette aide!