LONGJMP |
Long saut |
---|---|
Langage C++ | csetjmp (setjmp.h) |
Syntaxe
void longjmp(jmp_buf env,int val) |
Paramètres
Nom | Description |
---|---|
env | Ce paramètre permet d'indiquer l'environnement |
val | Ce paramètre permet d'indiquer la valeur |
Description
Cette fonction permet d'effectuer la restauration de la pile dans un saut non local.
Remarques
- La fonction longjmp() fait reprendre l'exécution du programme au point du dernier appel à setjmp(). Ces deux fonctions permettent de passer d'une fonction à l'autre. Notez que l'entête «csetjmp» est requis.
- La fonction longjmp() fonctionne en réinitialisant la pile à l'état tel que décrit dans le paramètre env, devant avoir été défini par un appel préalable à setjmp(). Cette situation provoque la reprise de l'exécution du programme à l'instruction suivant l'appel de la fonction setjmp(). Autrement dit, l'ordinateur est «trompé» en pensant qu'il n'a jamais quitté la fonction ayant appelé setjmp(). Comme explication quelque peu graphique, la fonction longjmp() «déforme» le temps et l'espace (mémoire) vers un point précédent de votre programme sans avoir à effectuer le processus de retour de fonction normal.
- Le tampon env est de type jmp_buf, étant défini dans l'entête «csetjmp». Le tampon doit avoir été défini via un appel à setjmp() avant d'appeler longjmp(). La valeur de val devient la valeur de retour de setjmp() et peut être interrogée pour déterminer d'où vient le saut en longueur. La seule valeur non autorisée est zéro.
- De loin, l'utilisation la plus courante de longjmp() consiste à revenir d'un ensemble de routines profondément imbriquées lorsqu'une erreur se produit.
Exemple
Voici un exemple permettant de sauvegarder l'environnement de façon à ce qu'il passe deux fois sur le même code :
Essayer maintenant !
on obtiendra le résultat suivant :
Appeler setjmpLongjmp est appelé
Voir également
Langage de programmation - C++ - Référence de procédures et fonctions - setjmp
Langage de programmation - C++ - Référence de procédures et fonctions - signal
Langage de programmation - C - Référence de procédures et fonctions - longjmp
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 733.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 164.
Dernière mise à jour : Lundi, le 3 août 2015