作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在kernel.h最小值定义为:
#define min(x, y) ({ \
typeof(x) _min1 = (x); \
typeof(y) _min2 = (y); \
(void) (&_min1 == &_min2); \
_min1 < _min2 ? _min1 : _min2; })
我不明白 (void) (&_min1 == &_min2);
这行是干什么的。是某种类型检查还是什么?
最佳答案
声明
(void) (&_min1 == &_min2);
是有保证的“无操作”。所以它存在的唯一原因是它的副作用。
但是声明没有副作用!
但是:它强制编译器在 x
和 y
的类型不兼容时发出诊断。
请注意,使用 _min1 == _min2
进行测试会将其中一个值隐式转换为另一种类型。
所以,这就是它的作用。 它在编译时验证x
和y
的类型是否兼容。
关于c - kernel.h中min宏中 "(void) (&_min1 == &_min2)"的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5595593/
我在 C 项目中使用 min() 和 max() 函数时遇到问题。我已经导入了 math.h,但是当我编译该文件时,我不断收到以下错误(即使使用 gcc 而不是 llvm 也会显示类似的错误):
我是一名优秀的程序员,十分优秀!