为什么C标准提供了unsized类型(int,long long,char与int32_t,int64_t,uint8_t等)?

时间:2014-05-23 21:44:06

标签: objective-c c

为什么stdint.h 标准的内容不包含在标准中(没有int没有短暂的没有浮点数,而是int32_t,int16_t,float32_t等)?模糊类型大小提供了什么优势?

在Objective-C中,为什么决定CGFloatNSIntegerNSUInteger在不同平台上有不同的尺寸?

2 个答案:

答案 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_tintlong等,而是使用size_tptrdiff_t这样的语义类型定义。这些实际上是使您的代码可移植的。