C语言 如何确定 limits.h 中的数据类型大小限制?



C中数据类型的大小限制是如何确定的?

这个问题的答案说使用limits.h作为数据类型的最小值和最大值。虽然有些人可能会停下来说好吧,好吧,但我在想:它怎么知道?如何设置limits.h中的限制,以便您可以在任何计算机(任何环境(上使用相同的limits.h

显然,32 位机器的处理方式与 64 位机器不同。然后你就有了你的小端序与大端序的复杂性。它怎么知道(用简单的英语(?

首先,C标准设定了最低要求。 例如,int必须足够大,至少可以容纳值 -32767 到 32767。但是该标准没有为编译器设置上限。

然后从那里,无论谁将编译器移植到给定的系统,都必须实现limits.h(也stdint.h(以适应给定系统的编译器。

传统上,int的大小设置为 CPU 的数据总线宽度,或者更确切地说,设置为 CPU 在单个指令中可以处理的最大可能大小。但这不是必需的 - 对于 64 位 CPU,编译器将int保留为 32 位,而是让longlong long为 64 位类型。

此外,签名格式也很重要。绝大多数现实世界的计算机都使用 2 的补码,因此 2 补码系统上 16 位类型的下限是 -32768 而不是 -32767 作为标准的最低要求。这是因为该标准接受其他一些非常奇特的符号格式。

然而,Endianess在这里不适用,因为这些标头只关注变量大小,而不涉及单个字节的寻址。

最新更新