Ce n'est pas « if (current->uid = 0) » qui a été introduit, cette syntaxe produisant un avertissement avec les compilateurs C pas trop bêtes. C'est « if ((options == (__WCLONE|__WALL)) && (current->uid = 0)) » qui ne produit pas d'avertissement car l'assignation est entourée par des parenthèses.
Il arrive tellement souvent qu'on se trompe (écrire a=b au lieu de a==b dans un if), que les compilateurs devraient générer une erreur. Sauf que beaucoup de programmes utilisent une assignation dans un if pour économiser une ligne ... Je trouve ça malsain d'économiser une ligne, ça rend le code plus difficile à relire et donc à maintenir.
La grammaire de Python interdit une assignation dans un test : « if a=b: ... » génère une SyntaxError.
[^] # Re: Les chinois du FBI...
Posté par Victor STINNER (site web personnel) . En réponse au journal Backdoor dans OpenBSD ?. Évalué à 5.
Il arrive tellement souvent qu'on se trompe (écrire a=b au lieu de a==b dans un if), que les compilateurs devraient générer une erreur. Sauf que beaucoup de programmes utilisent une assignation dans un if pour économiser une ligne ... Je trouve ça malsain d'économiser une ligne, ça rend le code plus difficile à relire et donc à maintenir.
La grammaire de Python interdit une assignation dans un test : « if a=b: ... » génère une SyntaxError.