Cosa rappresenta un tipo seguito da _t (underscore-t)?


261

Sembra una domanda semplice, ma non riesco a trovarla con la ricerca Stack Overflow o Google. Cosa significa un tipo seguito da una _tmedia? Ad esempio

int_t anInt;

Lo vedo molto nel codice C inteso a gestire da vicino l'hardware: non posso fare a meno di pensare che siano correlati.


3
Dove è int_tdefinito? Se è sempre definito come int, non è utile; è molto più chiaro da usare intdirettamente. Se non è sempre definito come int(diciamo, se potrebbe essere long into short int), allora è un nome mal scelto e confuso.
Keith Thompson,

Risposte:


213

Come ha notato Douglas Mayle, in pratica denota un nome di tipo. Di conseguenza, verrebbe sconsigliato di terminare i nomi di variabili o funzioni con ' _t' poiché ciò potrebbe causare confusione. Inoltre size_t, lo standard C89 definisce wchar_t, off_te ptrdiff_t, probabilmente, alcuni altri che ho dimenticato. Lo standard C99 definisce un sacco di tipi aggiuntivi, come ad esempio uintptr_t, intmax_t, int8_t, uint_least16_t, uint_fast32_t, e così via. Questi nuovi tipi sono definiti formalmente, <stdint.h>ma molto spesso userete <inttypes.h>quali (insolitamente per le intestazioni C standard) include <stdint.h>. It ( <inttypes.h>) definisce anche le macro da usare con printf()e scanf().

Come notò Matt Curtis, non c'è significato per il compilatore nel suffisso; è una convenzione orientata all'uomo.

Tuttavia, si dovrebbe anche notare che POSIX definisce molti nomi di tipi extra che terminano con " _t" e riserva il suffisso per l'implementazione. Ciò significa che se si lavora su sistemi correlati a POSIX, la definizione dei nomi dei propri tipi con la convenzione è sconsigliata. Il sistema su cui lavoro lo ha fatto (per più di 20 anni); veniamo regolarmente inciampati da sistemi che definiscono tipi con lo stesso nome che definiamo.


4
sembra ragionevole che il sistema operativo e le librerie di runtime comuni definiscano tipi con nomi generici; ma i tipi della tua azienda non dovrebbero essere anteposti con un prefisso o qualcosa del genere?
Toybuilder,

17
Uso _type invece di _t sui miei typedef proprio per evitarlo.
CesarB,

4
@Jonathan Leffler - Quale convenzione di denominazione useresti per i tipi definiti dall'utente?
J. Andrew Laughlin,

15
@Andrew: se hai una comoda abbreviazione da usare come prefisso, allora potresti essere sicuro di usare i abbr_xxxxx_tnomi dei tipi. Senza tale prefisso, potresti essere scoperto in qualsiasi momento. Generalmente, i _ttipi standardizzati usano tutti i caratteri minuscoli ( FILEe DIRsono due eccezioni, due volte - tutti i tappi e no _t), quindi puoi usarli CamelCase_tcon moderata sicurezza, con o senza i tappi iniziali. Il sistema su cui lavoro principalmente tende a vivere pericolosamente e ad usare _tcomunque, ma a volte ci ha morso. Tendo a usare CamelCasesenza un suffisso per il mio lavoro; le mie funzioni sono generalmente tutte minuscole.
Jonathan Leffler,

5
@JonathanLeffler, ho iniziato a usare quella convenzione, CamelCase per i tipi, lower_case per le funzioni. Ho cercato questa domanda sperando di non essere il solo. Grazie per la convalida!
Austin Mullins,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.