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

如果有下面这段代码:

#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
posted @ 2018-03-30 20:59  Zackary丶Liu  阅读(1000)  评论(0)    收藏  举报