Objective-C, Сравнение выражения без знака <0 всегда ложно, ошибка? - PullRequest
0 голосов
/ 10 ноября 2011

Я получаю следующее предупреждение Comparison of unsigned expression < 0 is always false.

Я не уверен, как это исправить?

if(topWindowIndex < 0)

Это определяется как ...

NSUInteger topWindowIndex = [allWindows count] - 1;

Ответы [ 3 ]

9 голосов
/ 10 ноября 2011

Если [allWindows count] - 1 никогда не может быть отрицательным, тест (и код, который он контролирует) не нужен.Если оно может быть отрицательным, вы должны объявить topWindowIndex типом со знаком (int или NSInteger).

Лучшим решением, IMO, является непосредственное сохранение счета и его использование вместо этого:

NSUInteger numWindows = [allWindows count];
...
if (numWindows < 1) ...
2 голосов
/ 10 ноября 2011

Это опасно

NSUInteger topWindowIndex = [allWindows count] - 1;

, если [allWindows count] равно 0, вы получите очень большое число (глупость) как topWindowIndex.

0 голосов
/ 29 сентября 2014

Базовый ответ из приведенных выше ответов:

Используйте NSInteger вместо NSUInteger (без знака).

...