gpt4 book ai didi

c++ - -Wtype-limits 尝试限制无符号整数

转载 作者:可可西里 更新时间:2023-11-01 16:20:31 25 4
gpt4 key购买 nike

考虑以下示例:

unsigned short c = // ...
if (c > 0xfffful)
c = 0xfffful;

由于 unsigned short 实际上可以大于 16 位,我想将 snprintf 之前的值以十六进制格式限制为固定大小的缓冲区。

但是,GCC(但不是 clang)发出警告:comparison is always false due to limited range of data type [-Wtype-limits]

这是 GCC 中的错误还是我遗漏了什么?我知道在我的机器上 unsigned short 正好是 16 位,但不能保证在其他平台上也是如此。

最佳答案

我会说这不是一个错误。 GCC 声称 if (c > 0xfffful) 将始终为 false,这在您的机器上为 true。 GCC 足够聪明,可以捕捉到这一点,但 clang 却没有。 GCC 干得好!

另一方面,GCC 不够聪明,无法注意到虽然它在您的 机器上总是错误的,但在其他人 的机器上不一定总是错误的。 加油 GCC!

请注意,在 C++11 中,*_least##_t 类型 appear (我保留被证明是错误的权利!)由 typedef 实现。当 GCC 运行时,它的警告检查可能不知道原始数据类型是 uint_least16_t。如果是这种情况,编译器将无法推断该比较在其他系统上可能是正确的。更改 GCC 以记住原始数据类型可能非常困难。我不是在为 GCC 的天真警告辩护,而是在暗示为什么它可能难以修复。

我很想知道 GCC 人员对此有何评论。你有没有考虑过filing an issue和他们一起?

关于c++ - -Wtype-limits 尝试限制无符号整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43955302/

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