在我的 C 语言练习过程中,我遇到了一个表达式,然后我将其简化如下:
int a=({10;});
这是一个合法的表达式,因为它通过了 gcc 编译器。请关注这部分:({10;})
. 有人能解释一下吗?越详细越好。谢谢!
在我的 C 语言练习过程中,我遇到了一个表达式,然后我将其简化如下:
int a=({10;});
这是一个合法的表达式,因为它通过了 gcc 编译器。请关注这部分:({10;})
. 有人能解释一下吗?越详细越好。谢谢!
这是一个语句表达式。它是gcc 扩展,根据文档6.1 Statements and Declarations in Expressions:
复合语句中的最后一件事应该是一个后跟分号的表达式;此子表达式的值用作整个构造的值。
所以对于这段代码:
int a=({10;});
根据这些规则,值将10
被分配给a
.
此扩展是Linux 内核中使用的许多 gcc 扩展之一,尽管链接的文章实际上并未涵盖语句表达式,但此内核新手常见问题解答条目解释了在 Linux 内核中使用语句表达式背后的一些原因。
正如gcc文档说明,使用-pedantic选项编译时会在您使用gcc 扩展时发出警告。
它不是标准的 C,而是 GCC 的扩展,称为statement expression。括在括号中的复合语句可以作为表达式出现。
复合语句中的最后一件事应该是一个后跟分号的表达式;此子表达式的值用作整个构造的值。
回到你的例子:
int a=({10;});
{10;}
用作复合语句表达式,因此a
其值为10
.