如何解释这个表达式“int a =({10;});”在C语言?

时间:2013-10-16 03:27:01

标签: c gcc gcc-extensions

在我的C语言练习中,我面对一个表达式然后我简化如下:

int a=({10;});

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

2 个答案:

答案 0 :(得分:7)

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

  

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

所以对于这段代码:

int a=({10;});

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

此扩展名为many gcc extensions used in the Linux kernel,虽然链接文章实际上并未涵盖语句表达式,但此kernel newbies FAQ entry解释了在Linux内核中使用语句表达式背后的一些原因

由于 gcc 文档说明使用 -pedantic 选项进行编译,因此当您使用 gcc扩展时会发出警告。

答案 1 :(得分:1)

它不是标准C,而是GCC的扩展名为statement expression。括在括号中的复合语句可能显示为表达式。

  

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

回到你的例子中:

int a=({10;});

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