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

kev*_*vin 7 c gcc gcc-extensions

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

int a=({10;});
Run Code Online (Sandbox Code Playgroud)

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

Sha*_*our 7

这是一个声明表达式.它是一个gcc扩展,根据文档6.1表达式中的语句和声明:

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

所以对于这段代码:

int a=({10;});
Run Code Online (Sandbox Code Playgroud)

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

这个扩展是Linux内核中使用的很多gcc扩展,虽然链接的文章实际上并不包含语句表达式,但这个内核新手FAQ条目解释了在Linux内核中使用语句表达式背后的一些原因.

由于gcc文档注意到使用-pedantic选项进行编译,因此当您使用gcc扩展时会向您发出警告.