Lorsque j'essaye de compiler le morceau de code ci-dessous, j'obtiens cet avertissement:
warning: suggest parentheses around assignment used as truth value
Pourquoi cela arrive-t-il? C'est un idiome 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 - alors le compilateur ne vous avertira pas que vous avez peut-être fait une erreur.
while ( (list = list->next) != NULL )
ou
while ( (list = list->next) )
Un jour, vous serez content que le compilateur vous l'ait dit, les gens do font cette erreur;)
Bien que cet idiome particulier soit courant, il est encore plus courant pour les gens d'utiliser =
quand ils veulent dire ==
. La convention quand vous entendez vraiment le =
consiste à 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 courant, mais aussi une erreur relativement courante lorsque vous vouliez avoir ==
là-dedans. Vous pouvez faire disparaître l'avertissement en ajoutant un autre jeu de parenthèses:
while ((list = list->next))