Bases de la programmation en C

int x = 5;
if (x = 0)
    printf("zero ");
else
    printf("nonzero ");
printf("%d\n", x);

Quelle est la sortie obtenue en exécutant le code ci-dessus, où = est écrit dans la condition d'une instruction if ?

  1. Azero 0
  2. Bnonzero 5
  3. Cnonzero 0
Afficher la réponse et l'explication

Réponse : C. nonzero 0

x = 0 dans la condition du if est une affectation, et non la comparaison ==. x reçoit 0 et la valeur de l'expression d'affectation est elle aussi 0 : la condition est jugée fausse, et c'est « nonzero », dans la branche else, qui est affiché. Le printf suivant affiche x, que l'affectation a mis à 0. Avec gcc, l'option -Wall produit un avertissement pour cette écriture : garder les avertissements activés aide à repérer l'erreur.

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

Autres questions sur Bases de la programmation en C

  1. Le code ci-dessus a été écrit pour tester si le bit 2 de la valeur de registre reg vaut 1. Quel est le résultat de son exécution ?
  2. uint8_t est un type entier non signé de 8 bits. Quelle est la sortie obtenue en exécutant le code ci-dessus ?
  3. uint8_t est un type entier non signé de 8 bits. Quelle est la sortie obtenue en exécutant le code ci-dessus, qui incrémente x 10 fois ?
  4. unsigned char fait 8 bits et int fait 32 bits. Quelle est la sortie obtenue en exécutant le code ci-dessus ?
  5. uint8_t est un type entier non signé de 8 bits et int fait 32 bits. Quel est le résultat de l'exécution du code ci-dessus ?