Bases de la programmation en C
int a = 0, b = 0;
if (a++ && b++) { }
if (a++ || b++) { }
printf("%d %d\n", a, b);Quelle est la sortie obtenue en exécutant le code ci-dessus, où b++ est écrit à droite de && et de || ?
- A2 0
- B2 1
- C2 2
Afficher la réponse et l'explication
Réponse : A. 2 0
&& n'évalue pas son côté droit si le côté gauche est faux, et || ne l'évalue pas si le côté gauche est vrai (évaluation en court-circuit). Dans le premier if, la valeur de a++ est 0, la valeur d'avant l'incrémentation, donc fausse : b++ n'est pas exécuté et seul a passe à 1. Dans le second if, la valeur de a++ est 1, donc vraie : là encore b++ n'est pas exécuté, et a passe à 2. Lorsque le côté droit contient une expression à effet de bord, comme ++ ou un appel de fonction, son exécution dépend de la valeur du côté gauche : il faut y prendre garde.
Continuer : 9 autres questions sur Bases de la programmation en C