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.