English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
Di seguito è la dichiarazione della macro setjmp().
int setjmp(jmp_buf environment)
environment -- È un oggetto di tipo jmp_buf utilizzato per memorizzare informazioni ambientali.
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.
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