开发C++数据比较的警告



我的程序中有一个WORD变量。

WORD hour;

但是当我比较它时

if(hour>=0 && hour<=18)
{
    hour+=6;
}

它将生成警告[警告] 由于数据类型范围有限,比较始终为真

我正在使用Dev-C++作为IDE。

if(hour>=0 && hour<=18)

我认为警告是为了比较hour >=0对于hour类型WORD总是正确的,这是 typedef 的 unsigned short(通常),这意味着hour总是大于或等于 0

 typedef unsigned short WORD;

在MSVC++上,这是WORD的定义方式,请检查编译器是否unsigned。如果它unsigned 1,那么对于 hour 的所有可能值,显然hour >=0 true。在这种情况下,您需要编写以下内容:

if(hour<=18) //(hour >= 0) is implied by its type
{
    hour+=6;
}

1.请注意,无论是unsigned int还是unsigned short都无关紧要。只要它是unsigned的,hour >=0对于hour的所有可能值都是真的。

似乎

WORD在某处typedef-ed unsigned整数类型,因此它将始终为正数(>=0)。所以第一个比较总是正确的。

根据 WORD 的数据类型(因为你没有提供它,我假设它是无符号短的),第一次比较总是正确的,因为无符号短整型中没有负整数。所以编译器告诉你,第一次比较或多或少是没有意义的。

最新更新