我查看了linux内核源代码(kernel.h),并发现这个宏用于min函数:
#ifndef max
#define max(x, y) ({ \
typeof(x) _max1 = (x); \
typeof(y) _max2 = (y); \
(void) (&_max1 == &_max2); \
_max1 > _max2 ? _max1 : _max2; })
#endif现在我想知道(void) (&_max1 == &_max2);行是做什么的?
发布于 2016-10-20 15:37:09
它防止了x或y的意外型铸造。您可以用相同的符号对不同大小的整数进行算术比较,但不能比较它们的指针。也就是说,这段代码将生成一个编译器警告:
short a = 47;
long b = 11;
min(a, b);C.f.Is comparing two void pointers to different objects defined in C++?
https://stackoverflow.com/questions/40158745
复制相似问题