为什么每个人都使用 typedef 而不是标准 C 类型?

Why does everybody typedef over standard C types?

如果你想使用Qt,你必须拥抱quint8quint16等等。

如果要使用GLib,必须欢迎guint8guint16

Linux上有u32s16等等。

uC/OS 定义 SINT32UINT16 等等。

如果您必须使用这些东西的某种组合,您最好做好遇到麻烦的准备。因为在你的机器上 u32typedefd 超过 longquint32typedefd 超过 int 并且编译器 会抱怨.

如果有<stdint.h>,为什么每个人都这样做?这是图书馆的某种传统吗?

stdint.h 在开发这些库时并不存在。所以每个图书馆都制作了自己的 typedefs.

对于较旧的库,这是必需的,因为所讨论的 header (stdint.h) 不存在。

但是,仍然存在一个问题:这些类型(uint64_t 和其他类型)是标准中的可选功能。因此,合规的实现可能不会与它们一起发布——因此迫使图书馆现在仍然包含它们。

stdint.h 自 1999 年以来已标准化。许多应用程序更有可能定义(有效别名)类型以保持与底层机器体系结构的部分独立性。

他们让开发人员相信,他们的应用程序中使用的类型符合他们对可能不符合语言标准或编译器实现的行为的项目特定假设。

这种做法反映在面向对象的 Façade 设计模式中,并且被开发人员滥用,总是为所有导入的库编写包装器 类。

当编译器不那么标准并且机器架构可能不同于 16 位时,18-bit through 36-bit word length mainframes this was much more of a consideration. The practice is much less relevant now in a world converging on 32-bit ARM embedded systems. It remains a concern for low-end microcontrollers with odd 内存映射。

所以你有能力将 char 类型定义为 int。

一位 "coding horror" 提到一家公司 header 有一个程序员想要布尔值,而 char 是该工作的逻辑本机类型,因此写道 typedef bool char.然后后来有人发现一个整数是最合乎逻辑的选择,并写成typedef bool int。在 Unicode 出现之前,结果实际上是 typedef char int.

相当多forward-thinking,我认为向前兼容。