Cela semble être une question simple, mais je ne la trouve pas avec la recherche Stack Overflow ou Google. Que signifie un type suivi d'une _t
moyenne? Tel que
int_t anInt;
Je le vois beaucoup dans le code C destiné à traiter étroitement avec le matériel - je ne peux m'empêcher de penser qu'ils sont liés.
c
naming-conventions
types
Kevin Griffin
la source
la source
int_t
défini? Si c'est toujours défini commeint
, ce n'est pas utile; c'est beaucoup plus clair à utiliserint
directement. Si ce n'est pas toujours défini commeint
(disons, si cela pourrait êtrelong int
oushort int
), alors c'est un nom mal choisi et déroutant.Réponses:
Comme l'a noté Douglas Mayle, il désigne essentiellement un nom de type. Par conséquent, il serait mal avisé de terminer les noms de variables ou de fonctions par '
_t
' car cela pourrait créer une certaine confusion. Ainsi quesize_t
, la norme C89 définitwchar_t
,off_t
,ptrdiff_t
et probablement d'autres , je l' ai oublié. La norme définit C99 beaucoup de types supplémentaires, tels queuintptr_t
,intmax_t
,int8_t
,uint_least16_t
,uint_fast32_t
, et ainsi de suite. Ces nouveaux types sont formellement définis dans<stdint.h>
mais le plus souvent, vous les utiliserez<inttypes.h>
(ce qui est inhabituel pour les en-têtes C standard)<stdint.h>
. Il (<inttypes.h>
) définit également les macros à utiliser avecprintf()
etscanf()
.Comme Matt Curtis l'a noté, il n'y a aucune signification pour le compilateur dans le suffixe; c'est une convention à vocation humaine.
Cependant, vous devez également noter que POSIX définit un grand nombre de noms de types supplémentaires se terminant par '
_t
' et réserve le suffixe pour l'implémentation. Cela signifie que si vous travaillez sur des systèmes liés à POSIX, il est déconseillé de définir vos propres noms de type avec la convention. Le système sur lequel je travaille le fait (depuis plus de 20 ans); nous sommes régulièrement déclenchés par des systèmes définissant des types avec le même nom que nous définissons.la source
abbr_xxxxx_t
des noms de type en toute sécurité . Sans un tel préfixe, vous pouvez vous faire attraper à tout moment. Généralement, les_t
types standardisés utilisent tous les minuscules (FILE
etDIR
sont deux exceptions, deux fois - tous les majuscules et non_t
), vous pouvez donc utiliserCamelCase_t
avec une sécurité modérée, avec ou sans les majuscules. Le système sur lequel je travaille principalement a tendance à vivre dangereusement et à utiliser de_t
toute façon, mais il nous a parfois mordu. J'ai tendance à utiliserCamelCase
sans suffixe pour mon propre travail; mes fonctions sont généralement toutes en minuscules.C'est une convention utilisée pour nommer les types de données, par exemple avec
typedef
:la source
L'
_t
encapsule généralement une définition de type opaque.GCC ajoute simplement des noms se terminant par
_t
à l'espace de noms réservé que vous ne pouvez pas utiliser, pour éviter les conflits avec les futures versions de Standard C et POSIX (manuel de la bibliothèque GNU C) . Après quelques recherches, j'ai finalement trouvé la référence correcte dans la norme POSIX (1003.1, Justification (informative)):En un mot, la norme dit qu'il y a de bonnes chances d'étendre la liste des types de normes, par conséquent, la norme restreint l'
_t
espace de noms à son propre usage.Par exemple, votre programme correspond à POSIX 1003.1 Issues 6 et vous avez défini un type
foo_t
. POSIX 1003.1 Issues 7 est finalement publié avec un nouveau type définifoo_t
. Votre programme ne correspond pas à la nouvelle version, ce qui pourrait être un problème. Restreindre l'_t
utilisation empêche de refactoriser le code. Ainsi, si vous visez une conformité POSIX, vous devez absolument éviter le_t
comme l'indique la norme.Note latérale: personnellement, j'essaie de m'en tenir à POSIX car je pense que cela donne de bonnes bases pour une programmation propre. De plus, j'aime beaucoup les directives Linux Coding Style (chapitre 5) . Il y a de bonnes raisons de ne pas utiliser typedef. J'espère que cette aide!
la source
Il s'agit d'une convention de dénomination standard pour les types de données, généralement définie par des typedefs. De nombreux codes C qui traitent des registres matériels utilisent des noms standard définis par C99 pour les types de données de taille fixe signés et non signés. Par convention, ces noms se trouvent dans un fichier d'en-tête standard (stdint.h) et se terminent par _t.
la source
C'est juste une convention qui signifie "type". Cela ne signifie rien de spécial pour le compilateur.
la source
Le
_t
n'a pas par nature de signification particulière. Mais il est devenu d'usage courant d'ajouter le_t
suffixe aux typedef.Vous connaissez peut-être mieux les pratiques courantes en C pour la dénomination des variables ... Cela ressemble à la façon dont il est courant de coller ap à l'avant pour un pointeur et d'utiliser un trait de soulignement devant les variables globales (c'est un peu moins courant) et d'utiliser les noms de variables
i
,j
etk
pour les variables de boucle temporaires.Dans le code où la taille des mots et l'ordre sont importants, il est très courant d'utiliser des types définis par l'utilisateur qui sont explicites, tels que
BYTE
WORD
(normalement 16 bits)DWORD
(32 bits).int_t
n'est pas si bon, car la définition deint
varie selon les plates-formes - à quiint
êtes-vous conforme? (Bien que, de nos jours, la plupart des développements centrés sur PC le traitent comme 32 bits, beaucoup de choses pour le développement non-PC traitent toujours les int comme 16 bits).la source
Cela signifie le type.
size_t
est le type de taille.la source
Il y avait quelques bonnes explications sur le sujet. Juste pour ajouter une autre raison de redéfinir les types:
Dans de nombreux projets intégrés, tous les types sont redéfinis pour indiquer correctement le dimensionnement donné aux types et pour améliorer la portabilité sur différentes plates-formes (c'est-à-dire les compilateurs de types de matériel).
Une autre raison sera de rendre votre code portable sur différents systèmes d'exploitation et d'éviter les collisions avec les types existants dans le système d'exploitation que vous intégrez dans votre code. Pour cela, un préfixe unique (le plus possible) est généralement ajouté.
Exemple:
la source
Si vous avez affaire à du code d'interface matérielle, l'auteur du code que vous
int_t
consultez peut avoir défini comme un entier de taille spécifique. La norme C n'attribue pas de taille spécifique auint
type (cela dépend de votre compilateur et de la plate-forme cible, potentiellement), et l'utilisation d'unint_t
type spécifique éviterait ce problème de portabilité.Ceci est une considération particulièrement importante pour le code d'interface matérielle, ce qui peut être la raison pour laquelle vous avez remarqué pour la première fois la convention.
la source
Par exemple en C99, /usr/include/stdint.h:
_t
signifie toujours défini par typedef.la source