7

在我的 C 语言练习过程中,我遇到了一个表达式,然后我将其简化如下:

int a=({10;});

这是一个合法的表达式,因为它通过了 gcc 编译器。请关注这部分:({10;}). 有人能解释一下吗?越详细越好。谢谢!

4

2 回答 2

7

这是一个语句表达式。它是gcc 扩展,根据文档6.1 Statements and Declarations in Expressions

复合语句中的最后一件事应该是一个后跟分号的表达式;此子表达式的值用作整个构造的值。

所以对于这段代码:

int a=({10;});

根据这些规则,值将10被分配给a.

此扩展是Linux 内核中使用的许多 gcc 扩展之一,尽管链接的文章实际上并未涵盖语句表达式,但此内核新手常见问题解答条目解释了在 Linux 内核中使用语句表达式背后的一些原因。

正如gcc文档说明,使用-pedantic选项编译时会在您使用gcc 扩展时发出警告。

于 2013-10-16T03:33:15.580 回答
1

它不是标准的 C,而是 GCC 的扩展,称为statement expression。括在括号中的复合语句可以作为表达式出现。

复合语句中的最后一件事应该是一个后跟分号的表达式;此子表达式的值用作整个构造的值。

回到你的例子:

int a=({10;});

{10;}用作复合语句表达式,因此a其值为10.

于 2013-10-16T03:32:59.977 回答