English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Outils en ligne

O)

Fonctions en C

Tableaux en C

Pointeurs en C

Chaînes de caractères en C

Contrôle de flux C

Structure C

Fichier C

Autres C

Manuel de référence C

Bibliothèque standard en C - <setjmp.h>

Utilisation et exemple de la macro setjmp() de la bibliothèque C Macro de la bibliothèque C int setjmp(jmp_buf environnement)

:Créer et initialiser un tampon local jmp_buf, utilisé pour les sauts à venir. Ce sous-programme sauvegarde l'environnement d'appel du programme dans le tampon pointé par env, env sera utilisé par longjmp. Si on revient directement de setjmp, setjmp renvoie 0. Si on revient de l'environnement de rappel de longjmp, setjmp renvoie une valeur non nulle.

Déclaration

int setjmp(jmp_buf environnement)

Paramètres

  • environnement -- C'est un objet de type jmp_buf utilisé pour stocker des informations d'environnement.

Valeur de retour

Cette macro peut ne pas renvoyer qu'une seule fois. La première fois, lors de l'appel direct, elle renvoie toujours 0. Lorsque longjmp est appelé avec des informations d'environnement définies, cette macro renvoie à nouveau, et à ce moment-là, la valeur qu'elle renvoie est transmise à longjmp en tant que deuxième paramètre.

Exemple en ligne

Le présent exemple montre l'utilisation de la macro setjmp().

#include <stdio.h>
#include <setjmp.h>
 
static jmp_buf buf;
 
void second(void) {
    printf("second\n");         // Imprimer
    longjmp(buf,1);             // retourner à l'endroit d'appel setjmp - ce qui rend setjmp renvoie la valeur1
}
 
void first(void) {
    second();
    printf("first\n");          // Il est impossible d'exécuter cette ligne
}
 
int main() {   
    if (! setjmp(buf)) {
        first();                // Avant d'entrer dans cette ligne, setjmp renvoie 0
    } else {                    // Lorsque longjmp revient, setjmp renvoie1Par conséquent, nous entrons dans cette ligne
        printf("main\n");       // Imprimer
    }
 
    return 0;
}

Compilons et exécutons le programme ci-dessus, cela produira le résultat suivant :

second
main

Bibliothèque standard en C - <setjmp.h>