Freigeben über


longjmp

Wiederherstellungsstapelumgebung und Ausführungsgebietsschema.

void longjmp( 
   jmp_buf env, 
   int value  
);

Parameter

  • env
    Variable, in der die Umgebung gespeichert wird.

  • Wert
    Um setjmp Aufruf zurückgegeben werden, Wert.

Hinweise

longjmp Die Funktion stellt einen Stapelumgebungs- und -ausführungsgebietsschema zurückgesetzt, das zuvor in env vom setjmp gespeichert wird. setjmp und longjmp bieten eine Möglichkeit, nicht lokalen goto auszuführen; Sie werden in der Regel verwendet, um dem Fehlerbehandlungs- Ablaufsteuerung oder Wiederherstellungscode zuvor in einer aufgerufenen Routine zu übergeben, ohne die Aufrufs- normalen und Rückholkonventionen zu verwenden.

Ein Aufruf von setjmp wird die aktuelle Stapelumgebung, in env gespeichert. Ein nachfolgender Aufruf longjmp wird die gespeicherte Umgebung und das Von zum Punkt direkt nach dem entsprechenden setjmp Aufruf zurückgesetzt. Ausführungszusammenfassungen, als ob Wert gerade durch den Aufruf setjmp zurückgegeben wurde. Die Werte aller Variablen (außer Registervariablen) das dem RoutineSteuerelement empfangenden zugänglich sind, enthalten die Werte, die sie aufwiesen, als longjmp aufgerufen wurde. Die Werte von Registervariablen sind unvorhersehbar. Der Wert, der von setjmp zurückgegeben, muss ungleich 0 (null) sein. Wenn als Wert 0 übergeben wird, wird der Wert 1 in der eigentlichen Beendigung ersetzt.

Rufen Sie longjmp vor der Funktion, die setjmp zurückgibt aufgerufen hat; andernfalls sind die Ergebnisse unvorhersehbar.

Beachten Sie die folgenden Einschränkungen, wenn longjmp verwendet wird:

  • Nehmen Sie nicht an, dass die Werte der Registervariablen gleich bleiben. Die Werte von Registervariablen aufrufenden nicht in setjmp werden den richtigen Werten wiederhergestellt werden, nachdem longjmp ausgeführt.

  • Verwenden Sie longjmp nicht zur Steuerung aus einer UnterbrechungBehandlungsroutine out, es sei denn, die Unterbrechung durch eine Gleitkommaausnahme verursacht wird. In diesem Fall kehrt ein Programm möglicherweise von einem Unterbrechungssteuerungsprogramm zu longjmp zurück, wenn es zuerst das mathematische GleitkommaPaket initialisiert, indem Sie _fpreset aufrufen.

    Notiz gibt acht, wenn setjmp und longjmp in C++-Programmen verwendet. Da diese Funktionen nicht C++-Objektsemantik unterstützen, ist es sicherer, den C++-Ausnahmebehandlungsmechanismus zu verwenden.

Weitere Informationen finden Sie unter Verwenden des setjmp und des longjmp.

Anforderungen

Routine

Erforderlicher Header

longjmp

<setjmp.h>

Zusätzliche Informationen zur Kompatibilität finden Sie unter Kompatibilität in der Einführung.

Bibliotheken

Alle Versionen C-Laufzeitbibliotheken.

Beispiel

Im Beispiel für _fpreset.

.NET Framework-Entsprechung

Nicht zutreffend. Mit PInvoke rufen Sie die Standard-C-Funktion auf. Weitere Informationen finden Sie unter Beispiele für Plattformaufrufe.

Siehe auch

Referenz

Prozess- und Umgebungssteuerung

setjmp