Bases de la programmation en C
unsigned int i;
for (i = 3; i >= 0; i--)
printf("%u ", i);unsigned int fait 32 bits. Quel est le comportement du code ci-dessus à l'exécution ?
- AIl affiche 3 2 1 0 et se termine
- BIl affiche 3 2 1 et se termine
- CAprès avoir affiché 3 2 1 0, il ne se termine pas et continue d'afficher des valeurs décroissantes à partir de 4294967295
Afficher la réponse et l'explication
Réponse : C. Après avoir affiché 3 2 1 0, il ne se termine pas et continue d'afficher des valeurs décroissantes à partir de 4294967295
i est non signé : il ne peut jamais devenir négatif, et la condition i >= 0 est toujours vraie. Exécuter i-- quand i vaut 0 le fait revenir à 2³² − 1 = 4294967295, et la boucle ne se termine pas : elle continue d'afficher 4294967294, 4294967293, etc. Pour compter à rebours jusqu'à 0, on utilise un int, ou on change l'écriture de la boucle, comme dans for (i = 4; i-- > 0; ). Avec gcc, l'option -Wextra avertit que cette comparaison est toujours vraie.
Continuer : 9 autres questions sur Bases de la programmation en C