Bases de la programmation en C

#define DEBUG 0
#ifdef DEBUG
    printf("A\n");
#endif
#if DEBUG
    printf("B\n");
#endif

Quelle est la sortie obtenue lorsque le code ci-dessus est écrit dans la fonction main et exécuté ?

  1. ASeul A est affiché
  2. BRien n'est affiché
  3. CA et B sont affichés
Afficher la réponse et l'explication

Réponse : A. Seul A est affiché

#ifdef DEBUG vérifie seulement si une macro nommée DEBUG est définie, sans regarder sa valeur. DEBUG est défini avec la valeur 0 : la condition est vraie et l'instruction qui affiche A est compilée. #if DEBUG examine la valeur, qui est 0 : la condition est fausse et l'instruction qui affiche B est supprimée. Pour activer ou désactiver du code de débogage, ce genre d'incohérence se produit si l'on ne choisit pas une fois pour toutes entre #ifdef et #if pour le test.

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

Autres questions sur Bases de la programmation en C

  1. Un registre de sortie de microcontrôleur est déclaré et utilisé comme ci-dessus. Quelle description de cette déclaration est correcte ?
  2. Quelle description du comportement indéfini, au sens de la norme du langage C, est correcte ?
  3. int et unsigned int font 32 bits. Laquelle des opérations suivantes est un comportement indéfini selon la norme du langage C ?
  4. Lorsque la fonction ci-dessus est compilée avec gcc en activant l'optimisation, le test if (p == NULL) peut être supprimé. Quelle en est la raison ?
  5. Que fixe la norme du langage C au sujet de la taille du type int ?