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

Corso di base del linguaggio C

Controllo di flusso del linguaggio C

Funzione del linguaggio C

Array del linguaggio C

Puntatore del linguaggio C

Stringa del linguaggio C

Struttura del linguaggio C

File del linguaggio C

Altri C

Manuale di riferimento del linguaggio C

Utilizzo e esempio della macro setjmp() della libreria C

Libreria standard C - <setjmp.h>

Macro della libreria C int setjmp(jmp_buf environment) : Crea un buffer locale jmp_buf e lo inizializza, utilizzato per il salto futuro a questo punto. Questa subroutine salva l'ambiente di chiamata del programma nel buffer indicato da env, che verrà utilizzato da longjmp. Se viene chiamato direttamente da setjmp, setjmp restituisce zero. Se viene chiamato dal programma di ripristino dell'ambiente di longjmp, setjmp restituisce un valore non zero.

Dichiarazione

Di seguito è la dichiarazione della macro setjmp().

int setjmp(jmp_buf environment)

Parametro

  • environment -- È un oggetto di tipo jmp_buf utilizzato per memorizzare informazioni ambientali.

Valore di ritorno

Questa macro potrebbe tornare più volte. La prima volta, quando viene chiamata direttamente, torna sempre zero. Quando viene chiamato longjmp con informazioni ambientali impostate, questa macro torna di nuovo, e il valore restituito viene trasmesso a longjmp come secondo parametro.

Esempio online

Il seguente esempio dimostra l'uso della macro setjmp().

#include <stdio.h>
#include <setjmp.h>
 
static jmp_buf buf;
 
void second(void) {
    printf("second\n"); // 打印
    longjmp(buf,1); // 跳回setjmp的调用处 - 使得setjmp返回值为1
}
 
void first(void) {
    second();
    printf("first\n"); // 不可能执行到此行
}
 
int main() {   
    if (! setjmp(buf)) {
        first(); // 进入此行前,setjmp返回0
    else { // 当longjmp跳转回,setjmp返回1,因此进入此行
        printf("main\n");       // Stampa
    }
 
    return 0;
}

Compiliamo ed eseguiamo il programma sopra riportato, il che produrrà i seguenti risultati:

second
main

Libreria standard C - <setjmp.h>