4

像这样的声明是什么意思?

int x  = ( { int a; scanf( "%d", &a ); a ; } ) ;

它编译并运行相当于:

int x;
scanf( "%d", &x );

这似乎是某种匿名函数调用之类的,但我不确定。我没有遇到过像({})以前那样的说法,我也无法在网上找到任何解释。任何帮助将不胜感激,谢谢:)

语境:

这是扩展以下代码中的宏时得到的代码:

#define SI ({int a;scanf("%d",&a);a;});
int x = SI;

这是某人在编程比赛中使用的代码。

4

1 回答 1

7

它是一个语句表达式。
它作为 GCC 支持的编译器扩展,它不是标准 C++,因此它是不可移植的。
如果您使用-pedantic标志编译代码,它会告诉您。

我的这个答案详细讨论了它。

于 2011-10-27T06:42:51.540 回答