F. *_* P. 43 c compiler-construction compiler-warnings
当我尝试编译下面的代码时,我收到此警告:
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;
}
Run Code Online (Sandbox Code Playgroud)
Eri*_*rik 66
明确 - 然后编译器不会警告您可能犯了错误.
while ( (list = list->next) != NULL )
Run Code Online (Sandbox Code Playgroud)
要么
while ( (list = list->next) )
Run Code Online (Sandbox Code Playgroud)
有一天你会很高兴编译告诉你,人们确实犯了这个错误;)
gee*_*aur 54
虽然这个特定的成语很常见,但更常见的是人们=
在他们的意思时使用==
.你真正的意思=
是使用一个额外的括号层:
while ((list = list->next)) { // yes, it's an assignment
Run Code Online (Sandbox Code Playgroud)
Car*_*rum 20
这只是一个"安全"警告.这是一个相对常见的习语,但当你打算==
在那里时也是一个相对常见的错误.您可以通过添加另一组括号来消除警告:
while ((list = list->next))
Run Code Online (Sandbox Code Playgroud)