LONGJMP |
Long saut |
---|---|
Turbo C | 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
- Un appel à la fonction longjmp restaure l'état de la tâche capturé par le dernier appel à setjmp avec le paramètre env. Il retourne ensuite de telle manière que setjmp semble être retourné avec la valeur val.
- Un état de tâche est : tous les registres de segments (CS, DS, ES, SS), les registres des variables (SI, DI), le pointeur de pile (SP), le pointeur de base de la pile (BP) et les drapeaux.
- Un état de tâche est suffisamment complet pour que setjmp et longjmp puissent être utilisés pour une mise en oeuvre des co-routines. Ces routines sont utiles pour traiter les erreurs et les exceptions rencontrées dans un sous-programme de bas niveau d'un programme.
- La fonction setjmp doit être appelé avant longjmp. La routine ayant appelé setjmp et configuré env doit toujours être active et ne peut pas être retournée avant l'appel de longjmp. Si cela se produit, les résultats sont imprévisibles.
- La fonction longjmp ne peut pas passer la valeur 0; si 0 est passé dans val, la fonction longjmp remplacera 1.
- La fonction longjmp est disponible sur les systèmes UNIX et est compatible avec ANSI C.
Exemple
Voici un exemple permettant de sauvegarder l'environnement de façon à ce qu'il passe deux fois sur le même code :
on obtiendra le résultat suivant :
Appeler setjmpLongjmp est appelé
Dernière mise à jour : Samedi, le 4 juillet 2015