Als ik het onderstaande stukje code probeer te compileren, krijg ik deze waarschuwing:
warning: suggest parentheses around assignment used as truth value
Waarom gebeurt dit? Dit is een vrij algemeen idioom, geloof ik. Ik gebruik zelfs zoiets eerder in mijn code.
struct PIDList*
getRecordForPID(struct PIDList* list, pid_t pid) {
while(list = list->next)
if (list->pid == pid)
return list;
return NULL;
}
Antwoord 1, autoriteit 100%
Wees expliciet – dan zal de compiler niet waarschuwen dat je misschien een fout hebt gemaakt.
while ( (list = list->next) != NULL )
of
while ( (list = list->next) )
Op een dag zul je blij zijn dat de compiler je vertelde dat mensen doendie fout maken 😉
Antwoord 2, autoriteit 73%
Hoewel dat specifieke idioom gebruikelijk is, is het nog gebruikelijker dat mensen =
gebruiken als ze ==
bedoelen. De conventie als je echt de =
bedoelt, is om een extra laag haakjes te gebruiken:
while ((list = list->next)) { // yes, it's an assignment
Antwoord 3, autoriteit 25%
Het is slechts een ‘veiligheidswaarschuwing’. Het is een relatief veelvoorkomend idioom, maar ook een relatief veel voorkomende fout als je ==
erin wilde hebben. U kunt de waarschuwing laten verdwijnen door nog een set haakjes toe te voegen:
while ((list = list->next))