Dans certains projets, pour éviter ce problème on utilise les "yoda conditions", ici on aurait écrit:
0 == current_uid
ce qui ne compile pas si on met un = à la place du ==
Mais aujourd'hui les compilateurs savent détecter ce type d'erreur (avec des warnings à activer).
Cette hossibilité de déclarer une variable dans un =f me semble surtout utile en c++ parce que la desruction de la variable sera faite dès la sortie du bloc if/else, cela peut parfois être important. En Ccela servira surtout à alléger l'écriture, ce qui n'est pas forcément une bonne idée (de la même façon que ne pas mettre d'accolades pour un if n'ets pas forcément une bonne idée).
Le blog mentionne des cas d'usages pour des macros, et effectivement c'est dans ce cas que ça peut devenir très intéressant. Imaginons du code comme ceci:
if (ISVALID(X)) { ... }
La macro ISVALID() peut avoir besoin de variables temporaires pour faire son travail.
[^] # Re: Assignation dans les if
Posté par pulkomandy (site web personnel, Mastodon) . En réponse au lien C'est parti pour la nouvelle version C2y du langage C. Évalué à 7.
Dans certains projets, pour éviter ce problème on utilise les "yoda conditions", ici on aurait écrit:
0 == current_uid
ce qui ne compile pas si on met un = à la place du ==
Mais aujourd'hui les compilateurs savent détecter ce type d'erreur (avec des warnings à activer).
Cette hossibilité de déclarer une variable dans un =f me semble surtout utile en c++ parce que la desruction de la variable sera faite dès la sortie du bloc if/else, cela peut parfois être important. En Ccela servira surtout à alléger l'écriture, ce qui n'est pas forcément une bonne idée (de la même façon que ne pas mettre d'accolades pour un if n'ets pas forcément une bonne idée).
Le blog mentionne des cas d'usages pour des macros, et effectivement c'est dans ce cas que ça peut devenir très intéressant. Imaginons du code comme ceci:
if (ISVALID(X)) { ... }
La macro ISVALID() peut avoir besoin de variables temporaires pour faire son travail.