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é

Macro setjmp

La fonction longjmp Le type sigjmp_buf


Entête à inclure

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

Macro setjmp

int setjmp( jmp_buf env );

La macro setjmp sauvegarde l'environnement courant dans l'objet jmp_buf fourni en paramètre. Lors du premier passage, elle retourne 0. Si un appel ultérieur à longjmp restaure cet environnement, elle retourne alors une seconde fois, avec une valeur non nulle.

Le standard C limite les endroits où setjmp peut être utilisée. En pratique, utilisez-la directement dans un test simple, par exemple dans un if, un switch ou une boucle. Evitez de l'enfouir dans une expression complexe.

Après un retour par longjmp, les variables locales modifiées depuis l'appel à setjmp peuvent avoir une valeur indéterminée si elles ne sont pas qualifiées avec volatile. C'est l'une des raisons pour lesquelles ce mécanisme doit rester exceptionnel.

Paramètres

Valeur de retour

La macro retourne 0 lors de son appel direct. Après un retour provoqué par longjmp, elle retourne la valeur transmise à longjmp, ou 1 si cette valeur était 0.

Exemple de code

L'exemple suivant montre la forme la plus courante : un premier passage initialise le traitement, le second passage traite l'erreur.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
#include <setjmp.h>
#include <stdio.h>
#include <stdlib.h>

static jmp_buf recoveryPoint;

static void fail() {
    longjmp( recoveryPoint, 42 );
}

int main() {

    int status = setjmp( recoveryPoint );

    if ( status == 0 ) {
        puts( "Premier passage." );
        fail();
    } else {
        printf( "Retour avec le code %d.\n", status );
    }

    return EXIT_SUCCESS;
}
Exemple d'utilisation de la macro setjmp

Le résultat produit est le suivant.

Premier passage.
Retour avec le code 42.

Sujets connexes

<setjmp.h>
jmp_buf
longjmp
sigsetjmp


La fonction longjmp Le type sigjmp_buf




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