(void) (&_x == &_y)的作用

时间:2021-08-24 00:27:55

如果有下面这段代码:

#define min(x, y)   ({          \
const typeof(x) _x = (x); \
const typeof(y) _y = (y); \
(void) (&_x == &_y); \
_x < _y ? _x : _y; }) int x = 2;
char y = 3;
int m;
m = min(x, y);

编译的时候,经过预处理后,就会有这样的判断操作:

int * == char *;

因此编译器就会提示:

warning: comparison of distinct pointer types lacks a cast

这个宏的巧妙之处就在于此。

所以,总结起来就是:

(void) (&_x == &_y) 用于判断输入的两个值的类型是否是一致的。如果不一致,那么编译器就会做出如下警告:warning: comparison of distinct pointer types lacks a cast

相关文章