如何确定C语言中数据类型的大小限制?
This question的答案是使用limits.h
表示数据类型的最小值和最大值。尽管有些人可能会停下来说好,好吧,但我在想:它怎么知道?如何设置limits.h
中的限制,以便您可以在任何计算机(任何环境?)上使用相同的limits.h
。
很明显,一台32位计算机与64位计算机的处理方式有所不同。然后,您将遇到复杂的小端到大端层。怎么知道(用简单的英语)?
答案 0 :(得分:4)
首先,C标准设置了最低要求。例如,18.0.0
必须足够大以至少容纳-32767到32767的值。但是标准没有为编译器使用设置上限。
然后从那里,将编译器移植到给定系统的任何人都必须实现int
(以及limits.h
)以使该编译器适合给定系统。
stdint.h
的大小通常设置为CPU的数据总线宽度,或者设置为CPU在单个指令中可以处理的最大大小。但这不是必须的-对于64位CPU,编译器将int
保留为32位,而让int
或long
为64位类型。
此外,签名格式也很重要。现实世界中的绝大多数计算机使用2的补码,因此2的补码系统上16位类型的下限为-32768,而不是标准的最低要求-32767。这是因为该标准接受其他一些非常奇特的签名格式。
Endianess不适用于此处,因为这些标头仅与变量大小有关,而不与单个字节的寻址有关。