gpt4 book ai didi

gcc - 奇特条件评估

转载 作者:行者123 更新时间:2023-12-04 14:09:06 25 4
gpt4 key购买 nike

如下代码:

#include <stdint.h>

int main() {
uint8_t Byte;

if (Byte < 0) { }
}


发出以下编译警告:

main.cpp: In function `int main()':
main.cpp:6: warning: comparison is always false due to limited range of data type


这可以。但是当我将条件更改为:

(1) if (true || (Byte < 0)) { }


我仍然会收到警告,而我希望收到类似“比较始终为真……”的警告:)

如果我将字节声明更改为:

(2) uint32_t Byte;


警告消失。

我该如何解释这种行为?

我的系统是gcc 4.1.2随附的RHEL 5.3 64位。

编辑:

(1)没有问题,我只是误解了编译器警告。
它不是说整个if是否为假,而是“ Byte <0”。

因此,问题仅仅是(2)-为什么Byte类型触发编译器警告。
常量“ 0”的类型为int,因此为4个字节。因此,如果uint8_t与int进行比较,则它必须与比较相关

最佳答案

将无符号的值与0的有符号的int进行比较时,该值首先(隐式)转换为int。由于uint8_t在0到255之间,当转换为32位int时为正。

另一方面,您的uint32_t在0到2 ^ 32-1之间,因此当转换为32位int时,它可能会换行并变为负数(所有大于或等于2 ^ 31的值都将转换为负int值)。因此,您的比较并不总是正确的,并且编译器是正确的。

关于gcc - 奇特条件评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4124406/

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