此警告不應出現在此代碼中嗎?「帶符號和無符號整數表達式之間的比較」只帶有無符號整數
#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