【发布时间】:2011-08-19 05:46:44
【问题描述】:
在阅读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 语法中进行挖掘,但仍然无法解决这个问题。
【问题讨论】:
-
42;也是一个声明 :-) -
啊,但我怀疑 OP 知道
42;是一个语句,因为它是标准 C 中的一个语句。但是,语句表达式不在标准 C 中。
标签: c gcc macros c-preprocessor