typeof(x) _x = (x); \
typeof(y) _y = (y); \
(void) (&_x == &_y); \
_x < _y ? _x : _y; })
int main()
{
min(3.2, 3);
return 0;
}
$ gcc macro.c
macro.c: In function `main':
macro.c:17: warning: comparison of distinct pointer types lacks a cast
int main()
{
int x = 3;
float y = 3.2;
(void) (&x == &y);
return 0;
}
(&x == &y);
&x 取变量x地址,转而进化为“取指针类型”的语义,更进而判断 x 类型
同样:&y 取变量 y 地址,转而进化为“取指针类型”的语义,更进而判断 y 类型
所以: (&x == &y); 主要的作用是: 通过比较两个指针,判断 x 与 y 的类型 是否相等
void 修饰为这条条件表达式是一条完整的C语句。
这条宏的目的是:维护同一类型的变量进行合理判断的完整性
从而让编译器给出警告信息,若不相等时,重新编写代码。
