[英]Why does the C standard provide unsized types (int, long long, char vs. int32_t, int64_t, uint8_t etc.)?
為什么不是stdint.h 標准的內容,當它被包含在標准(無INT無短路無浮動,但int32_t和int16_t,float32_t等)? 模棱兩可的字體大小提供/提供了什么優勢?
在Objective-C中,為什么決定在不同平台上CGFloat
, NSInteger
和NSUInteger
具有不同的大小?
在設計C時,有些計算機具有不同的字長。 不僅是8的倍數,還包括其他大小,例如PDP-7上的18位字大小。 因此,有時一個int
是16位,但也許是18位或32位,或完全是其他大小。 在Cray-1上, int
為64位。 結果, int
表示“對於此計算機而言方便的任何事物,但至少16位”。
那是大約四十年前。 計算機已經改變,所以它當然現在看起來很奇怪。
NSInteger
用於表示計算機的字長,因為在32位系統上要求數組的第50億個元素沒有意義,而在64位系統上則要求數組的十億分之一。
我不能說為什么CGFloat
是64位系統上的double
。 那使我感到困惑。
C旨在從嵌入式設備,手機通過便攜式設備移動到桌面,主機和其他方面。 它們沒有相同的基本類型,例如,后者可能具有uint128_t
,而其他類型則沒有。 在某些情況下,編寫具有固定寬度類型的代碼將嚴重限制可移植性。
這就是為什么偏愛你應該既不用uintX_t
也不int
, long
等,但語義的typedef如size_t
和ptrdiff_t
。 這些確實是使您的代碼可移植的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.