当我尝试编译下面的代码时,我收到此警告:
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;
}
明确 - 这样编译器就不会警告您可能犯了错误。
while ( (list = list->next) != NULL )
或
while ( (list = list->next) )
有一天你会很高兴编译器告诉你,人们确实会犯这个错误;)
虽然这种特定的习语很常见,但更常见的是人们在表示
=
时使用 ==
。 当您真正指的是 =
时,惯例是使用额外的括号:
while ((list = list->next)) { // yes, it's an assignment
这只是一个“安全”警告。 这是一个相对常见的习语,但当你想要在那里有
==
时,也是一个相对常见的错误。您可以通过添加另一组括号来消除警告:
while ((list = list->next))
此错误也可能发生在 if(x = 10),这是错误的 if(x == 10),这是正确的