我希望char,short和int类型的宽度为1,2和4字节。我在源代码中添加了 stdint.h 标题。这是否保证int8_t,int16_t和int32_t整数类型的宽度是指定的?实现这一目标的最佳方法是什么?
答案 0 :(得分:7)
如果存在这些类型,它们具有正确的宽度并以二进制补码编码。
编辑:您应该能够检查类型是否存在类似
#ifdef INT32_MAX
...
#endif
但是在所有最终用户体系结构(PC等)上,这些类型通常都存在。
答案 1 :(得分:3)
stdint.h
中定义的类型的全部目的是指定宽度。因此int8_t
将是8位宽,int16_t
- 16位宽等等。
答案 2 :(得分:1)
stdint.h
一些精确宽度的整数类型。这些是(来自wikipedia):
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
,其他类型保证为某个最小宽度。但他们同样可能比那更重要。这取决于实施。
答案 3 :(得分:1)
C99的stdint.h实际上并不保证存在这些类型。引用wikipedia:
除非实现支持宽度为8,16,32或64的类型,否则这些类型是可选的,然后它们应该将它们定义为具有相应N的相应类型。
但是,如果他们做存在,它们将是正确的宽度。
答案 4 :(得分:0)