Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 为什么C标准提供非大小的类型(int、long、char与int32、int64、uint8等等)?_Objective C_C - Fatal编程技术网

Objective c 为什么C标准提供非大小的类型(int、long、char与int32、int64、uint8等等)?

Objective c 为什么C标准提供非大小的类型(int、long、char与int32、int64、uint8等等)?,objective-c,c,Objective C,C,当标准中包含stdint.h时,为什么它的内容不是标准(没有int,没有short,没有float,但有int32\u t、int16\u t、float32\u t等)?模棱两可的类型大小提供了什么优势 在objective-C中,为什么决定CGFloat,NSInteger,NSInteger在不同的平台上有不同的大小?在设计C时,有不同字号的计算机。不仅是8的倍数,还有其他大小,如PDP-7上的18位字大小。所以有时候一个int是16位,但可能是18位,或者32位,或者其他一些大小。在Cr

当标准中包含stdint.h时,为什么它的内容不是标准(没有int,没有short,没有float,但有int32\u t、int16\u t、float32\u t等)?模棱两可的类型大小提供了什么优势


在objective-C中,为什么决定
CGFloat
NSInteger
NSInteger
在不同的平台上有不同的大小?

在设计C时,有不同字号的计算机。不仅是8的倍数,还有其他大小,如PDP-7上的18位字大小。所以有时候一个
int
是16位,但可能是18位,或者32位,或者其他一些大小。在Cray-1上,
int
为64位。因此,
int
的意思是“任何对这台计算机方便的东西,但至少16位”

那是大约四十年前的事了。电脑已经变了,所以现在看起来很奇怪

NSInteger
用于表示计算机的字长,因为在32位系统上要求数组的第50亿个元素是没有意义的,但在64位系统上却完全有意义


我无法解释为什么在64位系统上
CGFloat
double
。这让我很困惑。

当设计C时,有不同字号的计算机。不仅是8的倍数,还有其他大小,如PDP-7上的18位字大小。所以有时候一个
int
是16位,但可能是18位,或者32位,或者其他一些大小。在Cray-1上,
int
为64位。因此,
int
的意思是“任何对这台计算机方便的东西,但至少16位”

那是大约四十年前的事了。电脑已经变了,所以现在看起来很奇怪

NSInteger
用于表示计算机的字长,因为在32位系统上要求数组的第50亿个元素是没有意义的,但在64位系统上却完全有意义


我无法解释为什么在64位系统上
CGFloat
double
。这让我很困惑。

C意味着可以通过手机从嵌入式设备移动到描述操作、主时间和其他地方。它们没有相同的基类型,例如后者可能有
uint128\u t
,而其他类型没有。在某些情况下,使用固定宽度类型编写代码会严重限制可移植性


这就是为什么您不应优先使用
uintX\u t
int
long
等,而应使用语义类型,如
size\u t
ptrdiff\u t
。这些都是使您的代码可移植的因素。

C意味着可以通过手机从嵌入式设备移植到descktops、mainframe和其他地方。它们没有相同的基类型,例如后者可能有
uint128\u t
,而其他类型没有。在某些情况下,使用固定宽度类型编写代码会严重限制可移植性


这就是为什么您不应优先使用
uintX\u t
int
long
等,而应使用语义类型,如
size\u t
ptrdiff\u t
。这些确实是使您的代码可移植的因素。

标题和正文似乎不一致:您是否想知道为什么他们一开始没有将基元类型设置为固定大小,或者为什么这些类型仍然可用,并且在固定大小的备选方案面前普遍使用?“不明确的类型大小提供了什么优势?”我过去(现在仍然)对此感到好奇。也许这只是一个事实,有时对处理器来说是“本机的”(以及这带来的速度优势)比明确更重要。@delnan我想我是想问为什么作为一个持续的基础,C仍然写为int I=0;浮动f=1.0f;长l=3l,而不是花时间显式指定存储大小。一个明显的优点就是不必显式指定存储大小。反过来说,如果您所需要的只是一个模糊指定的“小整数”,那么被迫指定大小而不仅仅使用普通的
int
,有什么好处呢?我不明白为什么只使用固定大小的整数类型(这在标准中是可选的)会自动被认为更好,除非可以证明常规类型的优势。@PaulGriffiths当我需要一个模糊指定的“小整数”时,我会选择一个固定大小作为猜测,并有很大的误差(默认为u64). 在这里使用
int
不会给我带来任何好处,它可以防止我以平台无关的方式对溢出和其他限制进行推理。当我使用u32时,我知道它从0到40亿。我可以这样做。我可以说“支持4个GiB文件,没关系”。当我使用
int
时,我几乎什么都不知道,而且在一个平台上运行良好的输入可能会导致其他平台上溢出,这是绝对没有理由的。标题和正文似乎不一致:你想知道他们为什么不从一开始就固定原语类型的大小吗,或者,为什么这些类型在固定大小的替代品面前仍然可用并普遍使用?“不明确的类型大小提供了什么优势?”我过去(现在仍然)对此感到疑惑。也许这只是一个事实,有时对处理器来说是“本机的”(以及这带来的速度优势)比明确更重要。@delnan我想我是想问为什么作为一个持续的基础,C仍然写为int I=0;浮动f=1.0f;长l=3l,而不是花时间显式指定存储大小。一个明显的优点就是不必显式指定存储大小。反过来说,如果您只需要一个模糊指定的“小整数”,那么被迫指定大小而不仅仅使用