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

在阅读宋宝华的《Linux设备驱动开发详解》一书时,看到下面这段代码:

cpp 复制代码
#define min(x, y) ({        \
const typeof(x) _x = (x);   \
const typeof(y) -y = (y);   \
(void) (&_x == &_y);        \
_x < _y ? _x : _y;  })

这段代码可以理解如下:

(1)先赋值再比较,可以避免一般宏定义的副作用。

(2)用 const 可以提高可读性。

(3)代码 "(void) (&_x == &_y);" 的作用,是检查 _x 与 _y 的类型是否一致。

(4)添加 void 可以避免编译器弹出无意义的警告(因为其后面的地址比较的结果并没有使用)。

怎样理解第(3)点呢?

比如下面的这一段代码:

cpp 复制代码
int  x = 2;
char y = 3;
int  m = min(x, y);

在编译的时候,编译器会进行下面的判断操作:

cpp 复制代码
int * == char *;

因此编译器会给出警告:

cpp 复制代码
warning: comparison of distinct pointer types lacks a cast

因此 "(void) (&_x == &_y);" 可以检查 _x 与 _y 的类型是否一致,如果不一致则编译器给出警告。

相关推荐
凯瑟琳.奥古斯特1 小时前
K次取反最大化数组和解法(力扣1005)
开发语言·c++·算法·leetcode·职场和发展
林中青木1 小时前
CT重构原理及C++代码实现
c++·计算机视觉·重构
满天星83035771 小时前
Protobuf的介绍及使用
c++
☆cwlulu1 小时前
调试排查工具介绍(gdb、strace、Valgrind等)
开发语言·c++·嵌入式硬件·ubuntu
卷无止境2 小时前
C++ 存储类说明符(Storage Class Specifier)大横评
c++·后端
卷无止境2 小时前
C++ 编程的一大坑:非常量全局变量是"万恶之源"
c++·后端
C语言小火车2 小时前
C++ 快速排序(Quick Sort)深度精讲:分治思想、Lomuto 分区法及三数取中优化,面试手撕必会
c语言·开发语言·c++·面试·排序算法·快速排序
瓶中怪3 小时前
ROS2 机器人软件系统
linux·c++·python·ubuntu·vmware·ros2·机器人软件开发
从零开始的代码生活_3 小时前
NAT、代理服务与内网穿透详解
linux·服务器·网络·c++·http·智能路由器
charlie1145141914 小时前
Cinux: 加载第一个内核:从 bootloader 跳进 C++
linux·开发语言·c++·嵌入式