2

我有以下代码:

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)这种代码(-abuse)有名称吗?2) 在任何 C/C++ 标准中是否合法?3) 有没有办法让 MSCL 接受它?

4

2 回答 2

8

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

1)这称为复合语句表达式

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

于 2015-12-26T23:00:42.187 回答
1

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

x = ( 1, 2, 3 );
于 2015-12-26T23:01:54.300 回答