2011-05-16 77 views

回答

104

所有定義的C99 stdint.h定義了這些:

  • int8_t
  • int16_t
  • int32_t
  • uint8_t
  • uint16_t
  • uint32_t

而且,如果體系結構支持其中:

  • int64_t
  • uint64_t

有在stdint.h各種其它整數的typedef爲好。

如果你沒有C99環境卡住,那麼你應該提供你自己的typedefs並使用C99的。

uint32uint64(即沒有0​​後綴)可能應用特定的。

+12

這個答案是錯誤的。以上所有僅在實現中存在該尺寸的精確寬度類型(無填充)時纔可用。但是,即使不是這樣,NN'8,16,32和64 **的類型'int_leastNN_t'和'uint_leastNN_t'必須始終存在**。 C99不允許沒有至少64位整數類型的實現,因爲'long long'要求至少那麼大。 – 2011-05-16 13:40:42

+0

@R ..:說「POSIX stdint.h」而不是「C99 stdint.h」是否準確? – 2011-05-16 16:40:54

+0

POSIX'stdint.h'需要它們全部。 – 2011-05-16 17:12:30

9

那些整數類型在stdint.h

+0

是不是'stdint.h'實現特定?另見[這個問題](http://stackoverflow.com/questions/911035/uint32-int16-and-the-like-are-they-standard-c)和[這個問題](http://stackoverflow.com/questions/734802/fixed-width-in-c) – 2011-05-16 04:49:42

+3

查看文件我發現「ISO C99:7.18 Integer types 」在評論中。如果你尊重C99標準,我想你會得到'stdint.h'。 – philix 2011-05-16 04:53:23

+0

我在'stdint.h'中找不到它們中的任何一個。這會返回0個命中:'grep uint32 /usr/lib/gcc/x86_64-linux-gnu/4.9/include/stdint.h | grep -v uint32_t'。 – jww 2016-07-30 20:57:15

2

如果您使用C99只包括stdint.h。順便說一下,如果處理器支持64位類型,那麼就有64位類型。

+4

第二句話是不正確的。 – 2011-05-16 13:41:04

+0

請引用一下這方面的內容。 – BiGYaN 2011-05-16 16:41:02

+6

x86不支持64位數學運算,但具有64位類型。 – 2011-05-16 17:16:10