此代码,当使用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