2011-02-04 237 views
3

我希望char,short和int类型的宽度为1,2和4个字节。我已将stdint.h标题包含在我的来源中。这是否保证int8_t,int16_t和int32_t整数类型的宽度是指定的?达到此目的的最佳方法是什么?C中的精确宽度整数类型(stdint.h)

+0

这是定义的OS /体系结构。对于32位机器,它们应该具有这种尺寸。 – BlackBear 2011-02-04 21:04:34

+0

是的,但我在这里读到很多编译器不支持stdint.h。 – ezpresso 2011-02-04 21:11:16

+0

它有时也可能依赖于编译器(以及正在使用的标志)。你在使用什么操作系统/ CPU /编译器? – 2011-02-04 21:11:32

回答

7

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

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

#ifdef INT32_MAX 
... 
#endif 

,但对所有最终用户架构(PC等),这些类型通常是存在的。

3

stdint.h中定义的类型的整体目的是它们具有指定的宽度。所以int8_t将是8个位宽,int16_t - 16位宽等

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。但他们同样可以比这更大。这取决于实施。

1

C99的stdint.h实际上并不能保证存在这些类型。引述wikipedia

这些类型是可选的,除非实现支持类型为8,16,32或64的宽度,则它应它们与相应的N.的typedef到相应类型

然而,如果他们存在,他们将是正确的宽度。