【发布时间】:2015-12-26 22:52:54
【问题描述】:
我有以下代码:
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接受?
【问题讨论】:
-
这可能是 GCC statement expression,这是一个非标准的供应商扩展。
-
我明白了。这就说得通了。如果 mscl 中没有等效的功能,我想我将不得不重新设计我的生成器。
-
即使有
{}或({})括号,x = 1; 2; 3;的意义何在? -
如果您使用 C++11,您可以将其设为 lambda 并立即调用它。
x = [](){ 1; 2; return 3; }();。 (我可能语法错误;已经有一段时间了,但你明白了) -
所以这是一个 X-Y 问题?
标签: c++ c cl gcc-extensions