作者:记忆的旅行者 | 来源:互联网 | 2022-12-04 21:04
我有以下代码:
int main() {
int i=0;
int j=({int k=3;++i;})+1; // this line
return 0;
}
它编译并运行.如果我()
从"这一行" 删除,那么它不会编译.
我只是好奇这里应用了什么语法规则.
将{}
包含2条语句,最后声明表示该代码块的"回归"的价值.那为什么需要额外的()
一对来使这个返回值可用?
1> Some program..:
这是一个声明表达式,它是GCC特定的扩展.
从链接参考:
括在括号中的复合语句可能在GNU C中显示为表达式.这允许您在表达式中使用循环,开关和局部变量.
甲复合语句是语句的大括号包围块.
不要与表达式语句混淆,这是一个标准的东西.