Bases de la programmation en C
#define SQUARE(x) x * x
int a = 3;
printf("%d\n", SQUARE(a + 1));Quelle est la sortie obtenue en exécutant le code ci-dessus, qui utilise la macro SQUARE définie par #define ?
- A7
- B10
- C16
Afficher la réponse et l'explication
Réponse : A. 7
Une macro n'est qu'un remplacement de texte effectué par le préprocesseur. SQUARE(a + 1) est développé en a + 1 * a + 1, et la multiplication est calculée en premier : on obtient 3 + 3 + 1 = 7. Pour obtenir comme prévu le carré de (a + 1), soit 16, on entoure de parenthèses l'argument et le corps entier, comme dans #define SQUARE(x) ((x) * (x)). Même ainsi, avec un argument à effet de bord comme SQUARE(i++), i++ est évalué deux fois, ce qui est un comportement indéfini ; on peut alors utiliser une fonction inline à la place.
Continuer : 9 autres questions sur Bases de la programmation en C