Freigeben über


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 setjmplongjmp/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.

Siehe auch

Prozess- und Umgebungskontrolle
longjmp