Bonjour,

Citation Envoyé par Juju_41
Goto n'est pas méchant en soi .. mais il est vrai que dans certains langages il peut générer un code pas propre du tout à la compilation. Un exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
...
pour i allant de 0 à 50 faire {
   octetslus = lireunoctet();
   si (octetslus == 0) goto erreur;
}
...
// fin du programme

erreur:
// traitement de l'erreur
...
Si le compilateur gère les boucles "pour" en utilisant la pile, et bien le goto va laisser des données dessus inutilement, ce qui est très moche
Un compilateur raisonnablement intelligent sait qu'il est dans une (voir plusieurs) boucle(s) et qu'il la(les) gère par la pile quand il compile ce type de code.

Il sait donc qu'il faut compiler le goto sous la forme d'une série de POP de la pile (nombre variable selon le nombre de boucles séparant le goto de son label) avant de faire le JMP.

Un langage supportant les goto doit :
- soit les gérer correctement (ce que font la plupart)
- soit les interdire explicitement hors de la portée de la boucle ou de la fonction en cours, parce que sinon, le programme a toutes les chances de finir par planter, vu l'incohérence de la pile au bout de quelques appels/boucles/sauts.