gpt4 book ai didi

c - GCC 匿名函数变量地址的值丢弃比较的预期效果

转载 作者:行者123 更新时间:2023-12-04 19:48:03 24 4
gpt4 key购买 nike

<分区>

Linux 内核为类型中性数值运算定义了一些辅助宏。即宏 minmax 定义为(在 include/linux/kernel.h 中)

#ifndef max
#define max(x, y) ({ \
typeof(x) _max1 = (x); \
typeof(y) _max2 = (y); \
(void) (&_max1 == &_max2); \
_max1 > _max2 ? _max1 : _max2; })
#endif
#ifndef min
#define min(x, y) ({ \
typeof(x) _min1 = (x); \
typeof(y) _min2 = (y); \
(void) (&_min1 == &_min2); \
_min1 < _min2 ? _min1 : _min2; })
#endif

展开时,它们会生成执行操作类型中立和表达式赋值安全方式的匿名函数(使用 GCC 匿名函数)。到目前为止,一切都很好。令我惊讶的是这些宏生成的倒数第二个表达式:

   (void) (&_min1 == &_min2);

比较匿名函数范围内定义的临时变量的地址,然后丢弃结果; (void) 强制转换阻止显示任何警告。

我想知道这是什么预期的副作用?我天真地希望它能被优化掉,因为它没有副作用(至少我不知道)。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com