我有一个小样本功能:
#define VALUE 0
int test(unsigned char x) {
if (x>=VALUE)
return 0;
else
return 1;
}
我的编译器警告我,比较 (x>=VALUE) 在所有情况下都是正确的,这是正确的,因为 x 是一个无符号字符并且 VALUE 用值 0 定义。所以我将代码更改为:
if ( ((signed int) x ) >= ((signed int) VALUE ))
但警告又来了。我用三个 GCC 版本(所有版本 > 4.0,有时您必须启用 -Wextra)对其进行了测试。
在改变的情况下,我有这个明确的演员表,它应该是一个有符号的 int 比较。为什么它声称比较总是正确的?