Linux 内核 `min` 宏

Pep*_*nds 3 c macros

我正在查看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
Run Code Online (Sandbox Code Playgroud)

现在我想知道(void) (&_max1 == &_max2);line 有什么作用?

kay*_*kay 5

x它可以防止或 的意外类型转换y。您可以对具有相同符号的不同大小的整数进行算术比较,但不能比较它们的指针。即这段代码会生成编译器警告:

short a = 47;
long b = 11;
min(a, b);
Run Code Online (Sandbox Code Playgroud)

Cf是否比较两个指向 C++ 中定义的不同对象的 void 指针?