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 ?

  1. A7
  2. B10
  3. 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.

S'entraîner sur ce thème Retour au thème

Autres questions sur Bases de la programmation en C

  1. Le fichier d'en-tête sensor.h est écrit comme ci-dessus. Quel est le rôle des trois lignes #ifndef, #define et #endif ?
  2. Quelle est la sortie obtenue lorsque le code ci-dessus est écrit dans la fonction main et exécuté ?
  3. Un registre de sortie de microcontrôleur est déclaré et utilisé comme ci-dessus. Quelle description de cette déclaration est correcte ?
  4. Quelle description du comportement indéfini, au sens de la norme du langage C, est correcte ?
  5. int et unsigned int font 32 bits. Laquelle des opérations suivantes est un comportement indéfini selon la norme du langage C ?