c中的匿名代码块

时间:2011-10-27 06:39:27

标签: c macros anonymous-function parentheses

这样的陈述是什么意思?

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

它编译并运行等同于:

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

它似乎就像某种匿名函数调用或其他东西,但我不确定。我以前没有遇到像({})这样的陈述,我无法在网上找到任何解释。非常感谢任何帮助,谢谢:)

上下文

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

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

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

1 个答案:

答案 0 :(得分:6)

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

This 我的回答详细讨论了它。