使用 stdint.h 如何具有可移植性的优势?

por*_*mas 0 c stdint

我读到这stdint.h是用于便携性的,但我很困惑。

如果我在32位系统上编写程序,uint32_t(unsigned int)是4个字节。

但是当这个程序在16位系统上运行时,int是2bytes,uint32_t(unsigned int)是2bytes。

我认为在这种情况下无法保证可移植性。我理解有什么错误吗?

Joh*_*ger 6

我有什么理解错误的地方吗?

是的。

类型始终uint32_t是具有 32 位的无符号整数类型,其中没有填充位。在许多现代系统上对应于 type ,但在其他系统上它可能对应于不同的类型,例如。在没有具有正确属性的类型的系统上,根本没有定义它。unsigned intunsigned long int

uint32_t和其他显式宽度数据类型的目的stdint.h正是为了解决您提出的问题,(例如)unsigned int在不同的机器上具有不同的大小。

  • @porpomas是的,它主要提供typedef。这并不意味着每个编译器都会获得相同的定义。 (2认同)