【问题标题】:C: Is <limits.h> cross platform?C: <limits.h> 是跨平台的吗?
【发布时间】:2018-12-31 08:52:27
【问题描述】:

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

【问题讨论】:

  • 跨平台是什么意思?它是一个标准标题,但限制的实际值是实现定义的。标准仅提及最低要求值。
  • Yes?你没有这样的参考吗?
  • 可移植代码实际上并不存在。可以存在的是已成功移植的应用程序。所以编写“尽可能可移植”的代码是一种幻想
  • @SouraGhosh 我的意思是标准,抱歉含糊不清。现在我知道根据 AnttiHaapala 的回答,这是一个标准的 C 标头
  • 也就是说,any compiler where #include &lt;limits.h&gt; does not work,顾名思义就是不符合C标准的编译器,即语言不是Programming languages -- C -- ISO/IEC 9899,句号。在某些时候,我们应该 a) 停止关心 1989 年之前编写的编译器,b) 特别停止关心 1989 年之后编写的编译器,但对任何标准都竖起中指。

标签: c cross-platform c99 portability


【解决方案1】:

&lt;limits.h&gt; 在 C 标准中指定。 C11/C17 5.2.4.2.1 告诉包含&lt;limits.h&gt; 时可用的宏。该表还列出了实现所允许的最小值值。列表中每个宏的实际值是实现定义的。

值得注意的是,这个标头应该出现在任何符合标准的实现中即使目标是一个独立的环境(即没有标准库的服务)。

宏在 C11/C17 中 CHAR_BITSCHAR_MINSCHAR_MAXUCHAR_MAXCHAR_MINCHAR_MAXMB_LEN_MAXMB_LEN_MAXSHRT_MIN、@987654332、@、@987654332 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 实现中。

【讨论】:

    猜你喜欢
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多