Wenn ich versuche, den folgenden Code zu kompilieren, wird folgende Warnung angezeigt:
warning: suggest parentheses around assignment used as truth value
Warum passiert das? Ich glaube, das ist eine ziemlich verbreitete Redewendung. Ich benutze sogar so etwas früher in meinem Code.
struct PIDList*
getRecordForPID(struct PIDList* list, pid_t pid) {
while(list = list->next)
if (list->pid == pid)
return list;
return NULL;
}
Seien Sie explizit - dann warnt der Compiler nicht, dass Sie möglicherweise einen Fehler gemacht haben.
while ( (list = list->next) != NULL )
oder
while ( (list = list->next) )
Eines Tages wirst du froh sein, dass der Compiler dir gesagt hat, Leute mache mache diesen Fehler;)
Während diese bestimmte Redewendung gebräuchlich ist, verwenden Menschen noch häufiger =
, Wenn sie ==
Meinen. Die Konvention, wenn Sie wirklich das =
Meinen, besteht darin, eine zusätzliche Ebene von Klammern zu verwenden:
while ((list = list->next)) { // yes, it's an assignment
Es ist nur eine "Sicherheitswarnung". Es ist eine relativ häufige Redewendung, aber auch ein relativ häufiger Fehler, wenn Sie vorhatten, ==
Darin zu haben. Sie können die Warnung ausblenden, indem Sie weitere Klammern hinzufügen:
while ((list = list->next))