【问题标题】:Are variable length arrays supported under std=gnu89?std=gnu89 下是否支持变长数组?
【发布时间】:2014-07-14 06:34:56
【问题描述】:

我的代码包含以下行:

int counts[config.max_c];

我很惊讶地发现它使用默认的gcc 编译没有任何问题。根据man gcc,c 代码的默认标准是gnu89。这个标准是否支持这种类型的数组初始化,如果支持,我在哪里可以找到参考?

【问题讨论】:

  • 从手册页引用:“gnu89 - ISO C90 的 GNU 方言(包括一些 C99 功能)。这是 C 代码的默认设置。”对于一些 c99 功能,包括 vlas(如 vlas 的man pages 中所述。遗憾的是,您必须查找您感兴趣的每个功能,看看它是否受支持。
  • 只是添加到 +Carson 的评论中,为了澄清问题,gnu89(我们是 gnu90 的别名)不被视为 标准,只是一个'方言',这就是为什么答案是这样的

标签: c gcc c99 c89 variable-length-array


【解决方案1】:

此标准是否支持这种类型的数组初始化,如果支持,我在哪里可以找到参考资料?

没有。它不支持可变长度数组。

在 ISO C99 中允许使用可变长度的自动数组,extension GCC
尽管您在 C89 中编译代码,但由于 GCC 扩展,它编译时不会出错。

【讨论】:

    【解决方案2】:

    【讨论】:

    • GCC 的默认值(显然直到最近的版本,他们最终默认切换到 gnu11,尽管我认为我还没有使用这些版本)是使用 @ 987654324@(gnu89 完全相同)C 代码的方言,这意味着,至少在 GCC 下,默认情况下会支持它(通过扩展)。我认为即使-std=c90(与c89 相同)也支持它,因为除非您使用-pedantic,否则只会关闭某些扩展(与-ansi 相同的结果),但不要引用我的话。
    猜你喜欢
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 2020-12-22
    • 2020-03-22
    相关资源
    最近更新 更多