Objective-C,无符号表达式的比较< 0总是假的,错误?

时间:2011-11-09 22:12:51

标签: objective-c xcode cocoa-touch analyzer

我收到以下警告Comparison of unsigned expression < 0 is always false

我不确定如何修复它?

if(topWindowIndex < 0)

它被定义为......

NSUInteger topWindowIndex = [allWindows count] - 1;

3 个答案:

答案 0 :(得分:9)

如果[allWindows count] - 1永远不会为负数,则不需要测试(及其控制的代码)。如果它可能是否定的,则应将topWindowIndex声明为签名类型(intNSInteger)。

一个更好的解决方案,IMO,是直接存储计数并改为使用它:

NSUInteger numWindows = [allWindows count];
...
if (numWindows < 1) ...

答案 1 :(得分:2)

这很危险

NSUInteger topWindowIndex = [allWindows count] - 1;

如果[allWindows count]为0,则会得到一个非常大的数字(废话)作为topWindowIndex。

答案 2 :(得分:0)

以上答案的基本答案:

使用NSInteger代替NSUInteger(无符号)。