[英]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.