我有一个小样本函数:如何强制类型转换文字用C
#define VALUE 0
int test(unsigned char x) {
if (x>=VALUE)
return 0;
else
return 1;
}
我的编译器警告我说的比较(X> = VALUE)在所有情况下是真实的,哪些是对的,因为X是一个无符号的字符和值与值0定义所以我改变了我的代码:
if (((signed int) x) >= ((signed int) VALUE))
但警告再来。我测试了三个GCC版本(所有版本> 4.0,有时您必须启用-Wextra)。
在改变的情况下,我有这个明确的转换,它应该是一个有符号的int比较。为什么它声称比较总是正确的?
那么,你想完成什么?你想在什么条件下返回1而不是0? – 2009-09-01 13:21:54
我的意图是摆脱这个警告。 – 2009-09-01 13:31:10
不要摆脱这个警告,试图摆脱你需要知道一个无符号是否大于等于0.它总是 - 这就是编译器告诉你的。 – xtofl 2009-09-01 13:35:25