为什么这种比较总是如此?

Nat*_*man 9 c++ warnings unsigned-char

我的文件中有以下代码:

unsigned char * pData = new unsigned char...

...

if(pData[0] >= 160 && pData[0] <= 255)
Run Code Online (Sandbox Code Playgroud)

当我编译它时,我从编译器(gcc)收到警告:

警告:由于数据类型的范围有限,因此比较始终为真

怎么会这样?不是unsigned char0-255 的范围?我糊涂了.

Jam*_*lis 11

如果范围unsigned char是从0255pData[0]char那么pData[0] <= 255将永远是true.


pax*_*blo 5

表达式pData[0] <= 255始终为true,因为范围unsigned char为0..255(在您的特定实现中).

它只是抱怨那些表达式,因为它pData[0] >= 160可能是真假.

请记住,所有实现的范围unsigned char都不需要为0..255 (ISO C标准不要求这样做).