AccueilđŸ‡«đŸ‡·Chercher

Boucle infinie

Une boucle infinie est, en programmation informatique, une boucle dont la condition de sortie n'a pas Ă©tĂ© dĂ©finie ou ne peut pas ĂȘtre satisfaite. En consĂ©quence, la boucle ne peut se terminer qu'Ă  l'interruption du programme qui l'utilise.

Écran bleu de la mort à cause d'une boucle infinie

Pourquoi est-ce un problĂšme ?

Il y a rarement un intĂ©rĂȘt Ă  programmer une boucle infinie. Une telle boucle ne permet pas de faire sortir un rĂ©sultat, et accapare les ressources de l'ordinateur.

Sur un systĂšme monotĂąche, une boucle infinie peut interdire Ă  l'utilisateur toute autre action. Il faut alors interrompre de force l'exĂ©cution (on peut ĂȘtre obligĂ© de couper l'alimentation de l'ordinateur).

Les systÚmes modernes sont généralement suffisamment multitùches pour laisser le contrÎle à l'utilisateur, qui peut commander l'interruption du programme. Mais tant que ce n'est pas fait, l'ordinateur se retrouve beaucoup moins performant pour tout autre travail.

Une boucle infinie est donc presque toujours considérée comme un bug.

Une exception possible est celle d'un programmeur qui souhaiterait absolument maintenir son ordinateur en activité en son absence. Il peut donc programmer une boucle infinie en s'assurant qu'il pourra l'interrompre quand il le souhaitera.

Exemples de boucles infinies

Dans de nombreux langages de programmation, la boucle infinie la plus simple est, en pseudo-code :

tant que VRAI

ou en anglais

while TRUE

C'est-Ă -dire que les instructions doivent ĂȘtre exĂ©cutĂ©es tant que l'Ă©valuation de l'expression logique « VRAI » a comme rĂ©sultat « VRAI ».

En Python par exemple, une boucle infinie peut ĂȘtre dĂ©finie comme ceci :

while True:
    print "Boucle infinie"

L'instruction contenue dans la boucle s'exécute tant que la condition définie aprÚs while, or ici cette condition est toujours vraie (True).

La situation suivante crée également une boucle infinie :

i = 0
while i < 10:
    i = 1

En effet, la boucle se termine lorsque i n'est plus inférieur à 10, or l'instruction présente dans la boucle donne toujours à i la valeur 1 ; la condition d'entrée de la boucle est donc toujours vraie.

En C, en C++ ou en PHP, on peut trouver :

PHP :

<?php
    while(true)
        {
            //Code à insérer
        }
?>

C :

int i = 0;
while (i < 1) {
    // Instructions
}

La variable $i ou i n'est pas incrémentée (on ne lui ajoute pas 1) et par conséquent la condition sera toujours vérifiée car $i ou i = 0 < 1.

Boucles Ă  condition d'arrĂȘt

La structure décrite précédemment, while true, n'est pas forcément absurde. On peut, dans un langage comme le C, créer une boucle pseudo-infinie, dont la condition aprÚs le while est toujours respectée, tout en utilisant à l'intérieur de la boucle l'instruction break qui fait sortir de la boucle. Simplement, il faut s'assurer que la condition du break sera forcément atteinte, de préférence aprÚs un délai raisonnable.

On appelle boucle d'Alderson le cas particulier de boucle infinie pour lequel la boucle est infinie quant Ă  sa condition d'entrĂ©e, a une condition d'arrĂȘt, mais qu'une erreur de conception rend cette condition inaccessible. Dans ce cas, c'est bien sĂ»r un bug. Alderson est un programmeur qui avait codĂ© une fonction qui exĂ©cutait des instructions suivant que l'utilisateur clique sur « OK » ou « annuler », sans avoir affichĂ© les boutons en question[1].

RĂ©cursion infinie

L'exemple suivant en VBA renvoie une erreur de dépassement de pile :

Sub Test1()
  Call Test1
End Sub

Dans la culture informatique

Une vieille blague d'informaticien disait qu'« un Cray-3 est si rapide qu'il peut exécuter une boucle infinie en moins de 2 secondes »[2].

L'allée des bùtiments d'Apple à Cupertino s'appelle Infinite Loop, « boucle infinie » en anglais.

Notes et références

Voir aussi

Articles connexes

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplĂ©mentaires peuvent s’appliquer aux fichiers multimĂ©dias.