gpt4 book ai didi

c - 为什么 >>24 会导致 -Wconversion 但 >>23 不会?

转载 作者:太空狗 更新时间:2023-10-29 16:49:48 28 4
gpt4 key购买 nike

代码如下:

#include <stdint.h>

unsigned char f(uint32_t RGBA)
{
return (RGBA>>24) & 0xFF;
}

当使用 -Wconversion 编译时,它会导致“警告:从‘uint32_t {aka unsigned int}’转换为‘unsigned char’可能会改变其值 [-Wconversion]”。如果我将偏移值降低到 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 年 7 月 14 日,并且有 5 个重复项。根据错误报告中的评论,似乎有一些关于如何处理它的争论。

关于c - 为什么 >>24 会导致 -Wconversion 但 >>23 不会?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34775374/

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