加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么>> 24个原因 – 转换但>> 23不?

发布时间:2020-12-16 03:01:24 所属栏目:百科 来源:网络整理
导读:这是代码: #include stdint.hunsigned char f(uint32_t RGBA){ return (RGBA24) 0xFF;} 当使用-Wconversion编译时,会导致“警告:转换为’unsigned char’from’uint32_t {aka unsigned int}’可能会改变其值[-Wconversion]”.如果将shift值降低到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报告中的意见,似乎有一些关于如何处理它的争论.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读