我有这段代码,我不知道它是如何工作的
#include <stdio.h>
int main(void)
{
int numero = ({const int i = 10; i+10;});
printf("%d\n", numero); // Prints 20
return 0;
}
为什么我删除第二部分(i + 10;),编译器出错? 为什么括号必须?
谢谢^^!
答案 0 :(得分:13)
这是一个GCC statement expression。它执行其中的语句,并返回在最后一个语句中计算的值。因此numero
初始化为20
。如果删除第二部分,则没有表达式作为最后一个语句,因此无法从语句表达式中获取值。
必须使用大括号将其从普通的C括号表达式中消除歧义。