2012-06-22 40 views
0

我的程序中有一個WORD變量。數據比較的C++警告

WORD hour; 

但是,當我比較它

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

它將產生警告 [警告]比較永遠爲真,由於數據類型範圍限制

我使用開發 - C++在旁邊。

回答

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

我認爲該警告是用於比較hour >=0這始終是爲hour真正是WORD類型這是unsigned short(通常)一個typedef這意味着hour總是大於或等於0的:

typedef unsigned short WORD; 

在MSVC++上,它是如何定義WORD的,檢查你的編譯器是否爲unsigned。如果它unsigned ,那麼hour >=0明顯是true對於所有可能的值爲hour。在這種情況下,你只是需要這樣寫:

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

1.注意不要緊是否unsigned intunsigned short。只要是unsignedhour >=0對於hour的所有可能值都將爲真。

0

取決於WORD數據類型是什麼(因爲您沒有提供它,所以我認爲它是無符號短),第一次比較始終爲真,因爲沒有負整數適合無符號短整數。所以編譯器告訴你,第一個比較或多或少是毫無意義的。

1

看起來WORDtypedef - 某處爲unsigned整數類型,所以它總是正數(>=0)。所以第一個比較總是如此。

相關問題