What does a type followed by _t (underscore-t) represent?
As Douglas Mayle noted, it basically denotes a type name. Consequently, you would be ill-advised to end variable or function names with '_t
' since it could cause some confusion. As well as size_t
, the C89 standard defines wchar_t
, off_t
, ptrdiff_t
, and probably some others I've forgotten. The C99 standard defines a lot of extra types, such as uintptr_t
, intmax_t
, int8_t
, uint_least16_t
, uint_fast32_t
, and so on. These new types are formally defined in <stdint.h>
but most often you will use <inttypes.h>
which (unusually for standard C headers) includes <stdint.h>
. It (<inttypes.h>
) also defines macros for use with the printf()
and scanf()
.
As Matt Curtis noted, there is no significance to the compiler in the suffix; it is a human-oriented convention.
However, you should also note that POSIX defines a lot of extra type names ending in '_t
', and reserves the suffix for the implementation. That means that if you are working on POSIX-related systems, defining your own type names with the convention is ill-advised. The system I work on has done it (for more than 20 years); we regularly get tripped up by systems defining types with the same name as we define.
It's a convention used for naming data types, e.g with typedef
:
typedef struct {
char* model;
int year;
...
} car_t;