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

时间:2018-10-18 07:23:53

标签: c types

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

This question的答案是使用limits.h表示数据类型的最小值和最大值。尽管有些人可能会停下来说好,好吧,但我在想:它怎么知道?如何设置limits.h中的限制,以便您可以在任何计算机(任何环境?)上使用相同的limits.h

很明显,一台32位计算机与64位计算机的处理方式有所不同。然后,您将遇到复杂的小端到大端层。怎么知道(用简单的英语)?

1 个答案:

答案 0 :(得分:4)

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

然后从那里,将编译器移植到给定系统的任何人都必须实现int(以及limits.h)以使该编译器适合给定系统。

stdint.h的大小通常设置为CPU的数据总线宽度,或者设置为CPU在单个指令中可以处理的最大大小。但这不是必须的-对于64位CPU,编译器将int保留为32位,而让intlong为64位类型。

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

Endianess不适用于此处,因为这些标头仅与变量大小有关,而不与单个字节的寻址有关。