可能重复:
在哪些版本的 c 中,括号内的块用于返回有效值?
以下是典型 MAX 宏的类型安全版本(适用于 gcc 4.4.5):
#define max(a,b) \
({ __typeof__ (a) _a = (a); \
__typeof__ (b) _b = (b); \
_a > _b ? _a : _b; })
在这里,我们看到这个表达式 max(a,b) 返回了表达式的结果
_a > _b ? _a : _b;
即使这个表达式在一个块中。因此,我进行了调查,发现这是有效的 C:
int a = ({123;}); // a is 123
有人可以解释为什么这是有效的语法以及 ({statements}) 的真实行为是什么吗?此外,您会注意到 {123;} 不是有效的表达式,但只有 ({123;}) 是有效的。