这似乎是一个简单的问题,但我用Stack Overflow搜索或谷歌找不到它。类型后面跟着_t是什么意思?如
int_t anInt;
我在C代码中经常看到这种情况,这些代码是为了紧密地处理硬件——我忍不住认为它们是相关的。
这似乎是一个简单的问题,但我用Stack Overflow搜索或谷歌找不到它。类型后面跟着_t是什么意思?如
int_t anInt;
我在C代码中经常看到这种情况,这些代码是为了紧密地处理硬件——我忍不住认为它们是相关的。
当前回答
_t本身没有任何特殊含义。但是在typedef的后缀中添加_t已经成为一种常见的用法。
您可能更熟悉变量命名的常见C实践…这类似于在指针前面加一个p,在全局变量前面加一个下划线(这种情况不太常见),以及使用变量名i、j和k作为临时循环变量。
在字长和顺序很重要的代码中,通常使用显式的自定义类型,例如BYTE WORD(通常是16位)DWORD(32位)。
Int_t不是很好,因为int的定义在不同平台之间是不同的——那么你遵从谁的int呢?(尽管现在大多数以pc为中心的开发都将int视为32位,但许多非pc开发仍然将int视为16位)。
其他回答
关于这个问题有一些很好的解释。再补充一个重新定义类型的原因:
在许多嵌入式项目中,所有类型都被重新定义,以正确地声明类型的给定大小,并提高跨不同平台(即硬件类型编译器)的可移植性。
另一个原因是让你的代码可以跨不同的操作系统移植,并避免与你在代码中集成的操作系统中的现有类型发生冲突。为此,通常会添加一个惟一的(尽可能的)前缀。
例子:
typedef unsigned long dc_uint32_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年);我们经常会因为系统定义的类型与我们定义的名称相同而出错。
这是一种用于命名数据类型的约定,例如使用typedef:
typedef struct {
char* model;
int year;
...
} car_t;
意思是类型。Size_t是大小类型。
_t本身没有任何特殊含义。但是在typedef的后缀中添加_t已经成为一种常见的用法。
您可能更熟悉变量命名的常见C实践…这类似于在指针前面加一个p,在全局变量前面加一个下划线(这种情况不太常见),以及使用变量名i、j和k作为临时循环变量。
在字长和顺序很重要的代码中,通常使用显式的自定义类型,例如BYTE WORD(通常是16位)DWORD(32位)。
Int_t不是很好,因为int的定义在不同平台之间是不同的——那么你遵从谁的int呢?(尽管现在大多数以pc为中心的开发都将int视为32位,但许多非pc开发仍然将int视为16位)。