#include <setjmp.h> // <csetjmp> en C++
typedef /* implementation-defined */ jmp_buf;
Le type jmp_buf est un type tableau capable de conserver les informations nécessaires pour revenir à un point d'exécution
précédemment sauvegardé par setjmp.
Le contenu exact de ce type dépend de l'implémentation. Il peut contenir, par exemple, des registres processeur ou des informations de pile.
Vous devez donc le manipuler comme une boîte opaque : déclarez une variable de ce type, passez-la à setjmp et réutilisez-la
ensuite avec longjmp.
jmp_buf est un type tableau, il ne se copie pas avec une simple affectation. Le plus simple est de conserver l'objet
exactement là où il est déclaré, avec une durée de vie suffisante pour le saut non local attendu.
L'exemple suivant déclare un objet jmp_buf global, afin que le point de reprise reste accessible depuis plusieurs fonctions.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include <setjmp.h> #include <stdio.h> #include <stdlib.h> static jmp_buf recoveryPoint; static void doWork() { puts( "Début du traitement." ); longjmp( recoveryPoint, 1 ); } int main() { if ( setjmp( recoveryPoint ) == 0 ) { doWork(); } else { puts( "Retour au point de reprise." ); } return EXIT_SUCCESS; } |
Le résultat produit est le suivant.
Début du traitement. Retour au point de reprise.
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :