为什么stdint.h 标准的内容不包含在标准中(没有int没有短暂的没有浮点数,而是int32_t,int16_t,float32_t等)?模糊类型大小提供了什么优势?
在Objective-C中,为什么决定CGFloat
,NSInteger
,NSUInteger
在不同平台上有不同的尺寸?
答案 0 :(得分:3)
设计C时,有不同字号的电脑。不仅仅是8的倍数,而是其他尺寸,如PDP-7上的18位字大小。所以有时int
是16位,但也许它是18位,或32位,或完全是其他大小。在Cray-1上,int
是64位。因此,int
意味着"这台计算机不方便,但至少16位"。
NSInteger
用于表示计算机的字大小,因为在32位系统上询问数组的第50亿个元素是没有意义的,但它在64位系统。
我无法说明为什么CGFloat
在64位系统上是double
。这令我感到困惑。
答案 1 :(得分:2)
C可以从嵌入式设备,手机,descktops,mainfraime等以外的设备上移植。它们没有相同的基本类型,例如,后者可能有uint128_t
,而其他基本类型则没有。在某些情况下,使用固定宽度类型编写代码会严重限制可移植性。
这就是为什么您不应该使用uintX_t
或int
,long
等,而是使用size_t
和ptrdiff_t
这样的语义类型定义。这些实际上是使您的代码可移植的。