C中的精确宽度整数类型(stdint.h)

我希望char,short和int类型的宽度为1,2和4字节。 我在我的源代码中包含了一个stdint.h标题。 这是否保证int8_t,int16_t和int32_t整数类型的宽度是指定的? 实现这一目标的最佳方法是什么?

如果存在这些类型,它们具有正确的宽度并以二进制补码编码。

编辑:你应该能够检查类型是否存在类似的东西

#ifdef INT32_MAX ... #endif 

但是在所有最终用户体系结构(PC等)上,这些类型通常都存在。

stdint.h定义的类型的全部目的是指定宽度。 因此int8_t将是8位宽, int16_t – 16位宽等。

stdint.h一些精确宽度的整数类型。 这些是(来自维基百科 ):

 Specifier Signing Bits Bytes int8_t Signed 8 1 uint8_t Unsigned 8 1 int16_t Signed 16 2 uint16_t Unsigned 16 2 int32_t Signed 32 4 uint32_t Unsigned 32 4 int64_t Signed 64 8 uint64_t Unsigned 64 8 

如果你想知道确定的尺寸是什么,请使用它们。 C99要求这些类型具有指定的尺寸。 所有其他类型都依赖于平台。

根据limits.h ,其他类型保证是一定的最小宽度。 但他们同样可能比那更重要。 这取决于实施。

C99的stdint.h实际上并不保证存在这些类型。 引用维基百科 :

除非实现支持宽度为8,16,32或64的类型,否则这些类型是可选的,然后它们应将它们定义为具有相应N的相应类型。

但是,如果它们存在,它们将是正确的宽度。

您可以检查: 不同体系结构中C的int大小