c ++: предупреждение назначения правды с аргументами? - PullRequest
1 голос
/ 08 июня 2010

Я использую следующее для работы с аргументами в моих программах, но, кажется, просто вручаю мне предупреждение (просто предупреждение): "warning: suggest parentheses around assignment used as truth value"

Начало кода выглядит следующим образом:

   while((++argv)[0] && argv[0][0]=='-'){
      while(c =* ++argv[0])

Часть while(c =* ++argv[0]), в которой сохраняется предупреждение. Код работает нормально, но что означает это предупреждение в отличие от того, что используется?

Я думаю, что код c = *++argv[0], используя указатель. Так почему же один = работает и что действительно рекомендуется использовать?

Ответы [ 3 ]

5 голосов
/ 08 июня 2010

Компилятор не уверен, что вы намеревались

while(c == whatever)

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

while((c =* ++argv[0]) != 0)
1 голос
/ 08 июня 2010

Компилятор предупреждает, потому что вы могли случайно написать выражение вместо выражения. Вставляя оператор в скобки, вы сообщаете компилятору о своем намерении и прекращаете его предупреждение.

1 голос
/ 08 июня 2010

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

while( (c =* ++argv[0]) )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...