这似乎是一个简单的问题,但我用Stack Overflow搜索或谷歌找不到它。类型后面跟着_t是什么意思?如
int_t anInt;
我在C代码中经常看到这种情况,这些代码是为了紧密地处理硬件——我忍不住认为它们是相关的。
这似乎是一个简单的问题,但我用Stack Overflow搜索或谷歌找不到它。类型后面跟着_t是什么意思?如
int_t anInt;
我在C代码中经常看到这种情况,这些代码是为了紧密地处理硬件——我忍不住认为它们是相关的。
当前回答
这是一种用于命名数据类型的约定,例如使用typedef:
typedef struct {
char* model;
int year;
...
} car_t;
其他回答
关于这个问题有一些很好的解释。再补充一个重新定义类型的原因:
在许多嵌入式项目中,所有类型都被重新定义,以正确地声明类型的给定大小,并提高跨不同平台(即硬件类型编译器)的可移植性。
另一个原因是让你的代码可以跨不同的操作系统移植,并避免与你在代码中集成的操作系统中的现有类型发生冲突。为此,通常会添加一个惟一的(尽可能的)前缀。
例子:
typedef unsigned long dc_uint32_t;
这是一种用于命名数据类型的约定,例如使用typedef:
typedef struct {
char* model;
int year;
...
} car_t;
这只是一个惯例,意思是“类型”。它对编译器没有任何特殊意义。
如果您正在处理硬件接口代码,您正在查看的代码的作者可能已经将int_t定义为一个特定大小的整数。C标准没有为int类型分配特定的大小(这可能取决于您的编译器和目标平台),使用特定的int_t类型可以避免可移植性问题。
对于硬件接口代码,这是一个特别重要的考虑因素,这可能就是为什么您第一次注意到这里的约定。
它是数据类型的标准命名约定,通常由typedefs定义。很多处理硬件寄存器的C代码使用c99定义的固定大小有符号和无符号数据类型的标准名称。作为约定,这些名称在标准头文件(stdint.h)中,并以_t结尾。