【问题标题】:Is there any platform that not supports ANSI C 89?有没有不支持 ANSI C 89 的平台?
【发布时间】:2012-02-13 11:06:39
【问题描述】:

似乎 ANSI C 89 是编写跨平台库的最佳选择,因为许多平台(Windows、Unix、Linux、Mac、Android 等)都支持它。

但是有没有不支持 ANSI C 89 的平台?

我不确定 J2ME、iPhone 等..

【问题讨论】:

    标签: c cross-platform


    【解决方案1】:

    首先,ANSI C通常指的是C89,所以C89是多余的。

    iOS 支持 ANSI C 以及大多数平台。 J2ME 是一个 Java 平台,默认情况下它根本不支持 C。

    主要平台都支持ANSI C,但也有一些嵌入式平台不支持。我认为你不应该担心这些。

    【讨论】:

      【解决方案2】:

      任何用于代码或数据的内存太少的平台都不支持 C。 按照“2.2.4.1 翻译限制”部分中the standard 的要求:

      实现应该能够翻译和执行至少一个 至少包含每一个实例的程序 以下限制:

      • 复合语句的 15 个嵌套级别,迭代控制
        结构和选择控制结构

      • 8 个嵌套级别的条件包含

      • 12 个指针、数组和函数声明符(任意组合)
        修改算术、结构、联合或不完整类型
        在声明中

      • 31 个由括号嵌套在完整声明符中的声明符

      • 32 个用括号嵌套在完整表达式中的表达式

      ...

      • 在一个块中声明了127个块范围的标识符

      ...

      • 一个函数定义中有31个参数

      • 一个函数调用中有 31 个参数

      ...

      • 字符串文字或宽字符串文字中的 509 个字符 (连接后)

      • 对象中的 32767 个字节(仅在托管环境中)

      ...

      • 单个结构或联合中的 127 个成员

      ...

      • 15 级嵌套结构或联合定义在单个
        结构声明列表

      如果您仔细阅读该标准,您可能会发现其他要求。

      最后,如果有足够的内存,即使是一个很弱的平台也可以支持 C。它必须有额外的代码来克服硬件限制(例如支持所需的类型、算术运算等)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-11
        • 2018-11-18
        • 1970-01-01
        相关资源
        最近更新 更多