2011-02-04 235 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到相應類型

然而,如果他們存在,他們將是正確的寬度。