【发布时间】:2011-03-06 00:23:05
【问题描述】:
Statement and Declarations in Expressions 是特定于 GNU C 的吗?或者这个特性也包含在 C99 标准中?
【问题讨论】:
Statement and Declarations in Expressions 是特定于 GNU C 的吗?或者这个特性也包含在 C99 标准中?
【问题讨论】:
这是一个 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
【讨论】:
这是一个 GNU C 扩展。这就是他们所说的“可能出现在……在 GNU C 中”的意思。 (我的重点)
【讨论】:
虽然这不是 C99 标准,但此扩展也不是特定 gcc 的。
例如,clang compiler 和 Intel C++ compiler 支持此扩展。
【讨论】: