这个问题只是关于符号选择的原因。
要prevent bugs,必须提及像
这样的可变大小uint32_t VariableA; // uint32_t has been type defined for architecture whose int size is 32 bit.
int16_t VariableB;
而不是仅使用类型说明符,如
int VariableName;
这里的问题是为什么在uint32_t中使用_t而不是仅使用uint32。这个_t在哪里被附加在typedef中了?
答案 0 :(得分:2)
这些名称取自POSIX规范,该规范在C和C ++标准化固定大小整数类型的名称之前被广泛使用。 POSIX使用将_t
附加到大多数类型名称的约定。
答案 1 :(得分:1)
_t
约定来自UNIX的早期。接下来,大多数(或所有)标量类型的别名和Posix中的许多struct
类型都是这样命名的,有些类型甚至在C语言中标准化。
Posix还在C ++全局命名空间中保留所有以_t
为后缀的名称(或者通常用于C)。
在我的知识中,C ++没有引入任何新的_t
名称,并且最佳实践使用C ++标准库只会在std
命名空间中引入名称。
在未来的某个时刻,预计/希望Posix将在posix
命名空间中进行沙盒化。
在任何情况下,最佳做法是将所有接口typedef
保留在您自己的命名空间中,一旦完成此操作,将别名命名为_t
的标量类型就相当于合理的政策。好处是C ++通常对两个名称是否指的是真正不同的类型(但可能表现相似)或者它们实际上是同一事物的别名很敏感。 _t
显然是一个简单的别名。
答案 2 :(得分:0)
_t
基本上表示type
名称。因此,使用_t
结束变量或函数名称是不明智的,因为它可能会导致一些混淆甚至未定义的行为(取决于编译器等)。
<强>附录强>
POSIX
系统定义了许多以_t
结尾的额外类型名称,并为实现保留了后缀。因此,在处理与POSIX相关的系统时,使用约定定义自己的类型名称是不明智的,可能导致未定义的行为