Participer au site avec un Tip
Rechercher
 

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 :

Vous êtes un professionnel et vous avez besoin d'une formation ? Programmation avec
Le langage C
Voir le programme détaillé

Type jmp_buf

La librairie setjmp.h La fonction longjmp


Entête à inclure

#include <setjmp.h>  // <csetjmp> en C++

Type jmp_buf

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.

Comme 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.

Exemple de code

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;
}
Déclarer et utiliser un jmp_buf

Le résultat produit est le suivant.

Début du traitement.
Retour au point de reprise.

Sujets connexes

<setjmp.h>
longjmp
setjmp
sigjmp_buf


La librairie setjmp.h La fonction longjmp




Vous êtes un professionnel et vous avez besoin d'une formation ? Programmation avec
Le langage C
Voir le programme détaillé