[ Followup-To: fr.comp.lang.c ]
Didier <d...@invalid.invalid> wrote:
> C'est sans doute pas top, mais au moins c'est différent de la relation
> de comparaison, au sens mathématique comme au sens commun.
En fait, le plus grand problème de la notation = (affectation) et ==
(comparaison) apparaît dans les langages très expressifs comme C ou
Perl.
Par exemple en C
if (f = tcp_connect()) {
}
Cela appelle tcp_connect, affecte la valeur à la variable f, puis teste
si c'est différent de zéro. C'est très souvent utilisé et c'est
légitime.
Mais peut-être que le codeur voulait simplement comparer f au résultat
de tcp_connect() sans affecter? Au moins, gcc fait un warning (avec
-Wall), et suggère la forme:
if ((f = tcp_connect())) {
}
pour lui montrer que l'intention était bien d'affecter à f puis de
tester le résultat.
Une bonne pratique si l'on veut éviter une affectation par erreur
(écriture de == remplacée par erreur par =) est la suivante:
# risque si on oublie un =
if (c == 42) {
}
# pas de risque, 42 pas affectable, l'oubli d'un = fera
# une erreur, car la partie gauche n'est pas affectable
if (42 == c) {
}
-- Et pour les afficionados du langage Newton [1]
TAKE PUSH programme;
[1]
https://hopl.info/showlanguage.prx?exp=965&language=Newton