C: <limits.h> 是跨平台的吗?

C: Is <limits.h> cross platform?

我想编写尽可能可移植的 C99 或更新代码。所以我想确保它是便携的。

<limits.h>在C标准中有规定。 C11/C17 5.2.4.2.1 告诉包含 <limits.h> 时哪些宏可用。 table 还列出了允许实施的 最小值 。列表中每个宏的实际值是 implementation-defined.

值得注意的是,这个 header 应该出现在任何 standard-conforming 实现中 即使 目标是一个独立的环境(即没有服务标准库)——例如C11 draft N1570 4.6:

  1. [...] A conforming freestanding implementation shall accept any strictly conforming program in which the use of the features specified in the library clause (clause 7) is confined to the contents of the standard headers <float.h>, <iso646.h>, <limits.h>, <stdalign.h>, <stdarg.h>, <stdbool.h>, <stddef.h>, <stdint.h>, and <stdnoreturn.h>. [...]

宏在C11/C17、CHAR_BITSCHAR_MINSCHAR_MAXUCHAR_MAXCHAR_MINCHAR_MAXMB_LEN_MAX, SHRT_MIN, SHRT_MAX, USHRT_MAX, INT_MIN, INT_MAX, UINT_MAX, LONG_MIN, LONG_MAXULONG_MAXLLONG_MINLLONG_MAXULLONG_MAX.

由于 C89 既没有 long long int 也没有 unsigned long long int 最后 3 个不应该出现在符合 C89 的 C 实现中。