Lorsque j’essaie de comstackr le morceau de code ci-dessous, je reçois cet avertissement:
warning: suggest parentheses around assignment used as truth value
Pourquoi cela arrive-t-il? C’est un langage assez courant, je crois. J’utilise même quelque chose comme ça plus tôt sur mon code.
struct PIDList* getRecordForPID(struct PIDList* list, pid_t pid) { while(list = list->next) if (list->pid == pid) return list; return NULL; }
Soyez explicite – le compilateur ne vous avertira pas que vous avez peut-être commis une erreur.
while ( (list = list->next) != NULL )
ou
while ( (list = list->next) )
Un jour, vous serez heureux que le compilateur vous l’ait dit, les gens commettent cette erreur;)
Bien que cet idiome soit courant, il est encore plus courant que les gens utilisent =
quand ils veulent dire ==
. La convention lorsque vous voulez vraiment dire que le =
est d’utiliser une couche supplémentaire de parenthèses:
while ((list = list->next)) { // yes, it's an assignment
C’est juste un avertissement de sécurité. C’est un idiome relativement commun, mais aussi une erreur relativement commune quand vous vouliez avoir ==
dedans. Vous pouvez faire disparaître l’avertissement en ajoutant un autre jeu de parenthèses:
while ((list = list->next))