首页 > 解决方案 > 这里发生了什么?从范围内返回一个值?

问题描述

我有这个代码:

#include <stdio.h>

int main(void)
{
    int x;
    x = ({ int y=42; y; }); // What?
    printf("%d\n", x);
}

这打印 42。但我必须说我不明白。的值如何y分配给x?这是我以前在 C 中从未见过的东西。

我试图删除括号,但后来我得到了这个:

error: expected expression before ‘{’ token
    6 |     x = { int y=42; y; };
      |        

有人可以解释一下这里发生了什么吗?

标签: cgcc

解决方案


经过一番修补,我得出结论,它是一个编译器扩展,因为当我用它编译时,-pedantic我得到了这个:

warning: ISO C forbids braced-groups within expressions [-Wpedantic]
    6 |     x = ({ int y=42; y; });
      |         ^

推荐阅读