这似乎是一个简单的问题,但我用Stack Overflow搜索或谷歌找不到它。类型后面跟着_t是什么意思?如

int_t anInt;

我在C代码中经常看到这种情况,这些代码是为了紧密地处理硬件——我忍不住认为它们是相关的。


当前回答

例如,在C99中,/usr/include/ stdt .h:

typedef unsigned char           uint8_t;
typedef unsigned short int      uint16_t;
#ifndef __uint32_t_defined
typedef unsigned int            uint32_t;
# define __uint32_t_defined
#endif
#if __WORDSIZE == 64
typedef unsigned long int       uint64_t;
#else
__extension__
typedef unsigned long long int  uint64_t;
#endif

_t总是表示由typedef定义。

其他回答

这是一种用于命名数据类型的约定,例如使用typedef:


typedef struct {
  char* model;
  int year;
...
} car_t;

这只是一个惯例,意思是“类型”。它对编译器没有任何特殊意义。

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().

正如Matt Curtis所指出的,后缀对编译器没有任何意义;这是一个以人为本的惯例。

但是,您还应该注意到POSIX定义了许多以'_t'结尾的额外类型名,并为实现保留了后缀。这意味着如果您在posix相关的系统上工作,那么使用约定定义自己的类型名是不明智的。我工作的系统已经做到了(超过20年);我们经常会因为系统定义的类型与我们定义的名称相同而出错。

意思是类型。Size_t是大小类型。

例如,在C99中,/usr/include/ stdt .h:

typedef unsigned char           uint8_t;
typedef unsigned short int      uint16_t;
#ifndef __uint32_t_defined
typedef unsigned int            uint32_t;
# define __uint32_t_defined
#endif
#if __WORDSIZE == 64
typedef unsigned long int       uint64_t;
#else
__extension__
typedef unsigned long long int  uint64_t;
#endif

_t总是表示由typedef定义。