此代碼,當使用Visual Studio 2010讓Visual Studio中警告無符號比較
#include <cstdlib>
#include <cstdio>
int numbers[] = { 23, 24, 25, 25, 28, 20, 20 };
int main(void) {
int d = -1, x=0;
size_t count = sizeof(numbers)/sizeof(numbers[0]);
if (d <= (sizeof(numbers)/sizeof(numbers[0]))-2)
x = numbers[d+1];
if (d <= count-2)
x = numbers[d+1];
}
編譯給了我一個符號/無符號不匹配上if (d <= count-2)
但不能在if (d <= (sizeof(numbers)/sizeof(numbers[0]))-2)
警告。爲什麼是這樣?我已啓用全部警告。
去除-2也沒有標誌斷聲明具有符號不匹配 – Abhijit 2012-04-13 21:44:01
這將是倒退。當操作數具有混合的符號性和無符號的類型具有比所述簽名類型相等或更高的秩和這兩種類型的具有比相等或更高秩'int',已簽名的操作數轉換爲無符號的類型。因此,在這裏,操作數的類型爲int和size_t,int操作數(d)被轉換爲size_t(產生一個非常大的正數),並且對這兩個操作數進行比較'size_t'值。 – 2012-04-13 23:15:35