C块变为表达式:({int a = 1; int b = 2; a + b;})等于3

在阅读http://en.wikipedia.org/wiki/C_preprocessor#Multiple_evaluation_of_side_effects时 ,我遇到了这个例子:

\#define max(a,b) \ ({ typeof (a) _a = (a); \ typeof (b) _b = (b); \ _a > _b ? _a : _b; }) // WHY DOES THIS LINE WORK? 

你可以像函数一样使用它,即max(1,2)是一个评估为2的表达式。

我的问题是, ({ statment-list last-expression; })构造如何计算last-expression的值? 具体来说,这个结构的解析树是什么样的? 我认为{ }总是指复合语句,而语句没有值。 我试着在C语法中挖掘,仍然无法解决这个问题。

这是一个名为Statement Expressions的GCC扩展。 它不是标准C.