Использование результата задания как условие без круглых скобок

У меня это внутри пользовательского класса UIActionSheet

if (otherButtonTitles != nil) {
 [self addButtonWithTitle:otherButtonTitles];
 va_list args;
 va_start(args, otherButtonTitles);
 NSString * title = nil;
 while(title = va_arg(args,NSString*)) { // error here
 [self addButtonWithTitle:title];
 }
 va_end(args);
}

У меня есть эта ошибка

! используя результат задания как условие без круглых скобок

указывающий на эту строку

while(title = va_arg(args,NSString*)) {

почему?

спасибо.

4 ответа

Это, вероятно, не ошибка, как вы сказали, это предупреждение.

Компилятор предупреждает вас, что вы должны окружать назначения в круглых скобках, когда он находится в пределах условного условия, чтобы избежать ошибки ol < присваивания-когда-вы-среднего сравнения.

Чтобы пройти мимо этого довольно педантичного предупреждения компилятора, вы можете просто окружить назначение в другой паре круглых скобок:

while((title = va_arg(args,NSString*))) {
//...
}


Это должно быть предупреждение, а не ошибка. Он пытается предупредить, если вы используете =, но вы имели в виду ==.

В этом случае вы не имеете в виду использовать ==, потому что вы вызываете va_arg() несколько раз, чтобы выполнить итерацию через otherButtonTitles и назначив его temp var title, поэтому просто добавьте еще один набор круглые скобки. Предупреждение исчезнет.

while((title = va_arg(args,NSString*))) {


Компилятор

считает, что вы выполняете присвоение по ошибке, следовательно, предлагая эту ошибку. Вы должны обернуть свое утверждение в ONE MORE PAIR круглых скобок следующим образом:

while((title = va_arg(args,NSString*)))

Затем компилятор сначала оценит назначение, тогда результат этого присваивания будет передан в условие while


Это кажется немного придирчивым, но вы пробовали:

while((title = va_arg(args,NSString*)) != NULL)

?

licensed under cc by-sa 3.0 with attribution.