setjmp
Speichert den aktuellen Zustand des Programms.
Syntax
int setjmp(
jmp_buf env
);
Parameter
env
Variable, in der die Umgebung gespeichert wird.
Rückgabewert
Gibt 0 zurück, wenn die Stapelumgebung gespeichert wurde. Wenn setjmp
der Wert aufgrund eines longjmp
Aufrufs zurückgegeben wird, gibt es das value
Argument von longjmp
, oder wenn das value
Argument longjmp
0 ist, setjmp
1 zurück. Es gibt keine Fehlerrückgabe.
Hinweise
Die Funktion setjmp
speichert eine Stapelumgebung, die Sie anschließend mit longjmp
wiederherstellen können. Wenn Sie setjmp
und longjmp
zusammen verwenden, können Sie ein nichtlokales goto
ausführen. Sie werden in der Regel verwendet, um die Ausführungskontrolle an die Fehlerbehandlung oder Wiederherstellungscode in einer zuvor aufgerufenen Routine zu übergeben, ohne die normalen Aufruf- oder Rückgabekonventionen zu verwenden.
Ein Aufruf von setjmp
speichert die aktuelle Stapelumgebung in env
. Ein nachfolgender Aufruf von longjmp
stellt die gespeicherte Umgebung wieder her und übergibt die Steuerung an den Punkt direkt nach dem entsprechenden setjmp
-Aufruf. Alle Variablen (mit Ausnahme der Variablen „register“), die für die für das Steuerelement zur Routineerfassung zugänglich sind, erhalten die ursprünglichen Werte des longjmp
-Aufrufs.
Es ist nicht möglich, setjmp
von systemeigenem zu verwaltetem Code zu springen.
Microsoft-spezifisch
In Microsoft C++-Code unter Windows longjmp
wird die gleiche Stapelentspannsemantik wie Ausnahmebehandlungscode verwendet. Es ist sicher, an den gleichen Stellen zu verwenden, an denen C++-Ausnahmen ausgelöst werden können. Diese Verwendung ist jedoch nicht portierbar und enthält einige wichtige Einschränkungen. Ausführliche Informationen finden Sie unter longjmp
.
Ende Microsoft-spezifisch
Hinweis
Im portablen C++-Code können Sie keine C++-Objektsemantik annehmen setjmp
und longjmp
unterstützen. Insbesondere weist ein setjmp
longjmp
/Aufrufpaar ein nicht definiertes Verhalten auf, wenn die und durch catch
die setjmp
nicht longjmp
trivialen Destruktoren für alle automatischen Objekte ersetzt und throw
aufgerufen werden. In C++-Programmen wird empfohlen, den C++-Ausnahmebehandlungsmechanismus zu verwenden.
Weitere Informationen finden Sie unter Verwenden setjmp
und longjmp
.
Anforderungen
Routine | Erforderlicher Header |
---|---|
setjmp |
<setjmp.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Beispiel
Ein Beispiel hierfür finden Sie unter _fpreset
.