C ++数据比较警告

时间:2012-06-22 05:31:12

标签: c++ dev-c++ data-comparison

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

WORD hour;

但是当我比较它时

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

会产生警告 由于数据类型的范围有限, [警告]比较始终为真

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

3 个答案:

答案 0 :(得分:5)

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

我认为警告是针对hour >=0进行比较的hourWORD的类型unsigned shorthour的typedef(通常),这意味着{ {1}}始终大于或等于0

 typedef unsigned short WORD;

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

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

1。请注意,无论是unsigned int还是unsigned short都无关紧要。只要是unsignedhour >=0hour的所有可能值都适用。

答案 1 :(得分:1)

似乎WORDtypedef - 在unsigned整数类型的某处,所以它始终是正数(>=0)。所以第一次比较总是如此。

答案 2 :(得分:0)

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