此警告不应出现在此代码中吗?“带符号和无符号整数表达式之间的比较”只带有无符号整数
#include <stdio.h>
int main(void) {
unsigned char x = 5;
unsigned char y = 4;
unsigned int z = 3;
puts((z >= x - y) ? "A" : "B");
return 0;
}
z是一个不同的大小,但它是相同的签名。有没有我不知道的整数转换?下面是GCC输出:
$ gcc -o test test.c -Wsign-compare
test.c: In function ‘main’:
test.c:10:10: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
puts((z >= x - y) ? "A" : "B");
^
$ gcc --version
gcc (Debian 4.9.1-15) 4.9.1
如果z是一个unsigned char
我不明白的错误。
适合我!不要得到一个错误或警告 – Rizier123 2014-11-14 14:51:26
http://stackoverflow.com/questions/17312545/type-conversion-unsigned-to-signed-int-char – Lundin 2014-11-14 15:02:43
@ Rizier123:我一直使用C多年没有这个警告,这就是为什么我甚至不需要知道这一点。我猜gcc直到最近才发出这个警告,所以也许你的gcc版本是不同的? – 2014-11-14 15:16:27