我經常看到使用uint32,uint64等類型的源代碼,我想知道它們應該由程序員在其應用程序代碼中定義還是在標準lib頭文件中定義。像任何stdlib頭文件中定義的類型uint32,int32,uint64,int64?
在我的應用程序源代碼上使用這些類型的最佳方式是什麼?
我經常看到使用uint32,uint64等類型的源代碼,我想知道它們應該由程序員在其應用程序代碼中定義還是在標準lib頭文件中定義。像任何stdlib頭文件中定義的類型uint32,int32,uint64,int64?
在我的應用程序源代碼上使用這些類型的最佳方式是什麼?
所有定義的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的。
的uint32
和uint64
(即沒有0後綴)可能應用特定的。
那些整數類型在stdint.h
是不是'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
查看文件我發現「ISO C99:7.18 Integer types
我在'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
如果您使用C99只包括stdint.h
。順便說一下,如果處理器支持64位類型,那麼就有64位類型。
第二句話是不正確的。 – 2011-05-16 13:41:04
請引用一下這方面的內容。 – BiGYaN 2011-05-16 16:41:02
x86不支持64位數學運算,但具有64位類型。 – 2011-05-16 17:16:10
這個答案是錯誤的。以上所有僅在實現中存在該尺寸的精確寬度類型(無填充)時纔可用。但是,即使不是這樣,NN'8,16,32和64 **的類型'int_leastNN_t'和'uint_leastNN_t'必須始終存在**。 C99不允許沒有至少64位整數類型的實現,因爲'long long'要求至少那麼大。 – 2011-05-16 13:40:42
@R ..:說「POSIX stdint.h」而不是「C99 stdint.h」是否準確? – 2011-05-16 16:40:54
POSIX'stdint.h'需要它們全部。 – 2011-05-16 17:12:30