L'éternité, c'est long, surtout vers la fin.
Considérons le programme suivant :
void main() /* eternite 1 */ { int a, i; i = 1; a = 0; while (i < 100) a = a + i; }
Ce programme a peu de chance de se terminer sans aide extérieure, car le
test i < 100
sera toujours vérifié. En effet, la valeur
de la variable i n'est pas modifiée dans la boucle.
C'est également le cas dans cette variante :
void main() /* eternite 2 */ { int a, i; i = 1; a = 0; while (i < 100) a = a + i; i = i + 1; }
Le programmeur a cette fois oublié d'inclure l'incrémentation de i
dans l'instruction while
au moyen d'un bloc {...}
.
On déjà vu également des choses du style :
void main() /* eternite 3 */ { int i; i = 1; while ((i < 100) || (i > 0)) i = i + 1; }
Le problème vient ici d'une erreur dans la formulation du test, dans cet exemple, le résultat sera toujours vrai.
Une dernière variante, pour la route :
void main() /* eternite 4 */ { int i; i = 1; while (i < 100); i = i + 1; }Exercice : trouvez l'erreur.