Предупреждение компилятора-предложите круглые скобки вокруг назначения, используемого в качестве значения истины
когда я пытаюсь скомпилировать часть кода ниже, я получаю это предупреждение:
warning: suggest parentheses around assignment used as truth value
почему это происходит? По-моему, это довольно распространенная идиома. Я даже использую что-то подобное ранее в своем коде.
struct PIDList*
getRecordForPID(struct PIDList* list, pid_t pid) {
while(list = list->next)
if (list->pid == pid)
return list;
return NULL;
}
3 ответов
быть явным-тогда компилятор не предупредит, что вы, возможно, допустили ошибку.
while ( (list = list->next) != NULL )
или
while ( (list = list->next) )
когда-нибудь вы будете рады, что компилятор сказал вам, люди do сделать эту ошибку ;)
в то время как эта конкретная идиома является общей, еще более распространенной для людей, чтобы использовать =
, когда они имеют в виду ==
. Конвенция, когда вы действительно имеете в виду =
использовать дополнительный слой скобки:
while ((list = list->next)) { // yes, it's an assignment
это просто предупреждение о безопасности. Это относительно распространенная идиома, но и относительно распространенная ошибка, когда вы хотели иметь ==
там. Вы можете сделать предупреждение уйти, добавив еще один набор скобок:
while ((list = list->next))