如何解释这个表达;int a=({10;})&引用;用C语言?

如何解释这个表达;int a=({10;})&引用;用C语言?,c,gcc,gcc-extensions,C,Gcc,Gcc Extensions,在我的C语言练习中,我面对一个表达式,然后将其简化为: int a=({10;}); 它是一个合法的表达式,因为它通过了gcc编译器。 请关注这部分:({10;})。有人能解释吗?越详细越好。谢谢 它不是标准C,而是GCC的一个扩展名为。括在括号内的复合语句可以显示为表达式 复合语句中的最后一件事应该是后跟分号的表达式;此子表达式的值用作整个构造的值 回到您的示例中: int a=({10;}); {10;}用作复合语句表达式,因此a的值为10这是一个语句表达式。这是一个文件,根据文件: 复

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

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

它不是标准C,而是GCC的一个扩展名为。括在括号内的复合语句可以显示为表达式

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

回到您的示例中:

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

这是一个语句表达式。这是一个文件,根据文件:

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

对于这段代码:

int a=({10;});
根据这些规则,值将为
10
,该值将分配给
a

这个扩展就是其中之一,虽然链接的文章实际上没有涉及语句表达式,但这解释了在Linux内核中使用语句表达式背后的一些原因


正如gcc文档所指出的,使用-pedantic选项编译将在您使用gcc扩展时发出警告。

我几乎可以肯定这是一个gcc扩展,而不是一段合法的C代码。不过,我很想看看它是什么已经解释了它的含义(它是一个gcc扩展),但是它写得更清楚,更便于携带,如
inta=10@GrijeshChauhan:嗯?对于
inta=[10],gcc给了我
错误:在“[”标记之前应该有表达式。你希望它做什么?@GrijeshChauhan:不,这也是一个语法错误。(你应该在发布之前尝试一下。)