为什么>> 24个原因 – 转换但>> 23不?
这是代码:
#include <stdint.h> unsigned char f(uint32_t RGBA) { return (RGBA>>24) & 0xFF; } 当使用-Wconversion编译时,会导致“警告:转换为’unsigned char’from’uint32_t {aka unsigned int}’可能会改变其值[-Wconversion]”.如果将shift值降低到23或更小,则警告消失. 我看过C99标准,我不明白这里发生了什么.如果我删除&然后,警告总是被发出,这可能是很好的,因为表达式(整数促销之后)的结果大于unsigned char.我唯一的想法是,对于较小的班次而言,忽略了警告,因为gcc是聪明的,并且看到结果是8位,因为标准不会使这种情况变得特别.我在这里吗 为什么转移价值很重要?那是GCC的错误吗? Clang似乎不会对任何转换值产生警告. 我在64位Linux系统上使用GCC 5.3.1. 解决方法
正如Shafik Yaghmour所说,这似乎是GCC的一个错误:
GCC Bug 40752: -Wconversion generates false warnings for operands not larger than target type 自4.4.0版以来,似乎已经存在,首次在2009-07-14报道,共有5个重复.根据bug报告中的意见,似乎有一些关于如何处理它的争论. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |