【问题标题】:Are "Statement and Declarations in Expressions" specific to GNU C?“表达式中的声明和声明”是否特定于 GNU C?
【发布时间】:2011-03-06 00:23:05
【问题描述】:

Statement and Declarations in Expressions 是特定于 GNU C 的吗?或者这个特性也包含在 C99 标准中?

【问题讨论】:

    标签: c standards gnu c99


    【解决方案1】:

    这是一个 GCC 扩展。 (有关 GCC 扩展的完整列表,请参阅 GCC 文档 e.g. here for gcc 4.3.3;以及 C99 spec is available here。)

    如果您使用 -pedantic -std=c99 标志,GCC 将警告此类事情,例如:

    $ cat foo.c
    int main(void)
    {
      return ({ int a = 0; a; });
    }
    $ gcc -pedantic -std=c99 -c foo.c
    foo.c: In function 'main':
    foo.c:3: warning: ISO C forbids braced-groups within expressions
    

    【讨论】:

    • C99 标准中是否也包含该功能?
    【解决方案2】:

    这是一个 GNU C 扩展。这就是他们所说的“可能出现在……在 GNU C 中”的意思。 (我的重点)

    【讨论】:

    • C99 标准中是否也包含该功能?
    • @AndreiCiobanu - 不,它仅限于 GNU C(而不是标准 C)
    【解决方案3】:

    虽然这不是 C99 标准,但此扩展也不是特定 gcc 的。

    例如,clang compilerIntel C++ compiler 支持此扩展。

    【讨论】:

      猜你喜欢
      • 2020-08-16
      • 1970-01-01
      • 2016-08-27
      • 2011-12-11
      • 1970-01-01
      • 2014-05-31
      相关资源
      最近更新 更多