Envoyé par
ali.ensi
Bonjour.
J'ai la ligne de code suivante et j'ai un doute sur la manière de l'interprêter :
#define INTERIOR_WITH_LIMITED_BLIND_SPOT_AREA_NUMBER (2)
Est ce qu'elle est equivalente à :
#define INTERIOR_WITH_LIMITED_BLIND_SPOT_AREA_NUMBER 2
Si oui, a quoi servent donc les parenthèses.
Si non, comment l'interprêter alors?
En fait, les parenthèses servent à éviter divers problèmes dus à la priorité des opérateurs quand on utilise des macro paramétrées
Exemple 1
Tout semble correct puis tu demandes CARRE(2 + 3) => le préprocesseur transforme ça en 2 + 3 * 2 + 3 => résultat 11 au lieu de 25
Pour se prémunir, on met des parenthèses aux paramètres
#define CARRE(x) (x) * (x)
Là, CARRE(2 + 3) se traduit en (2 + 3) * (2 + 3) => 25
Exemple 2: Tout content de connaître ce danger, tu continues sur la macro suivante
#define SOMME(x, y) (x) + (y)
Pas de problème puisque les paramètres sont encadrés... jusqu'à ce que tu demandes SOMME(2, 3) * 2 => le préprocesseur transforme ça en (2) + (3) * 2 et l'expression te donne 8 au lieu de 10.
Pour se protéger contre ce danger, on rajoute des parenthèses à la macro
#define SOMME(x, y) ((x) + (y))
Là, SOMME(2, 3) * 2 de traduit en ((2) + (3)) * 2 => 10
Conclusion => en prenant l'habitude de mettre des parenthèses aux macro, les programmeurs ont pris l'habitude d'en mettre tout le temps même quand, comme pour toi, c'est inutile. Donc ici c'est plus une écriture "habituelle" qu'une obligation. Ca marchera bien évidemment pareil si tu enlèves les parenthèses mais puisqu'il faut les mettre parfois, autant les mettre tout le temps.
Partager