C/C++ 中括号内的代码块是否合法,MSCL 可以编译吗?

Are code blocks inside parenthesis in C/C++ legal and can MSCL compile it?

我有以下代码:

int x;
x = ({ 1; 2; 3; });
printf("%d\n", x); // should be 3

(如果你好奇为什么我会写出那样恶心的代码。答案是我不是。我正在写一个输出 C 代码的生成器,有这样的声明会让事情变得很多更容易。)

该代码在 Apple LLVM 版本 7.0.2 上编译和运行(当然有未使用代码的警告)但在 MSCL 10.0 和 14.0 上失败(错误 C2059:语法错误:“{”)。

我的问题是:1) 这种代码(-滥用)有名称吗? 2) 在任何 C/C++ 标准中是否合法? 3)有没有办法让MSCL接受?

对问题的 MSCL 部分一无所知,因为我一直使用 GCC。在 GCC 中:

1) 这个叫做compound statement expression;

2) 这是一个非标准的 GCC 扩展。

而不是复合语句表达式,为什么不使用逗号运算符而只写:

x = ( 1, 2, 3 );