以下是一个类型安全的典型MAX宏的版本(在gcc 4.4.5上有效):
即使此表达式在代码块中,它仍然是有效的C语言。我进行了调查,并发现这是合法的代码:
有人能解释一下为什么这是有效的语法,以及({statements})的真实行为吗?同时,你会发现{123;}不是一个有效的表达式,只有({123;})才是。
注:MAX宏是一个常见的宏定义,用于取两个数中的最大值。此处的类型安全版本是指使用了一些技巧,使得不会出现类型不匹配的问题。
#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;})才是。