317 votes

Ce qui représente un type suivi par _t (trait de soulignement-t) ?

Cela semble être une question simple, mais je ne le trouve pas avec le débordement de pile recherche ou Google. Que signifie un type suivi d’un `` veux dire ? Comme

Je le vois beaucoup dans le code C censé traiter près de matériel-je ne peux pas m’empêcher de penser qu’ils sont liés.

258voto

Jonathan Leffler Points 299946

Comme Douglas Mayle a noté, il désigne un nom de type. Par conséquent, il serait mal avisé de la fin de la variable ou de la fonction des noms avec"_t', car il pourrait causer une certaine confusion. Ainsi que size_t, le C89 norme définit wchar_t, off_t, ptrdiff_t, et probablement quelques autres que j'ai oublié. Le standard C99 définit beaucoup de types, tels que l' uintptr_t, intmax_t, int8_t, uint_least16_t, uint_fast32_t, et ainsi de suite. Ces nouveaux types sont officiellement définies en <stdint.h> mais le plus souvent, vous utiliserez <inttypes.h> qui (contrairement à la norme en-têtes C) inclut <stdint.h>. C' (<inttypes.h>) définit les macros pour une utilisation avec l' printf() et scanf().

Comme Matt Curtis a noté, il n'y a pas d'importance pour le compilateur dans le suffixe; c'est un homme orienté convention.

Toutefois, il convient également de noter que POSIX définit beaucoup de types de noms se terminant par"_t', et se réserve le suffixe pour la mise en œuvre. Cela signifie que si vous travaillez sur POSIX systèmes connexes, la définition de vos propres noms de type de la convention est mal conseillé. Le système que je travail sur l'a fait (depuis plus de 20 ans); nous avons régulièrement trébucher par des systèmes de définition des types avec le même nom que nous définissons.

59voto

mmacaulay Points 2048

C’est une convention utilisée pour nommer les types de données, par exemple avec `` :

58voto

Benoit Points 1484

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!

19voto

mkClark Points 648

C’est une convention d’affectation de noms standard pour des types de données, généralement défini par typedef. Beaucoup de code C qui traite des registres de matériel utilise des noms standards C99 définis pour les types de données de taille fixe signés et non signés. Comme une convention, ces noms sont dans un fichier d’en-tête standard (stdint.h) et se terminent par _t.

13voto

Douglas Mayle Points 7216

Cela signifie que le type. ``est le type de taille.

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