longjmp

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu setjmp.h - Index


Header-Datei

setjmp.h

Kategorie

Verschiedene Routinen

Prototyp

void longjmp(jmp_buf jmpb, int retval);

Beschreibung

Führt ein nicht lokales goto durch.

Ein Aufruf von longjmp stellt den Task-Status wieder her, der durch den letzten Aufruf von setjmp mit dem Argument jmpb erfasst wurde. Die Funktion kehrt dann so zurück, als wäre setjmp mit dem Wert retval zurückgekehrt.

Ein Win32-Task-Status umfasst:

  • Registervariablen
  • EBX, EDI, ESI
  • Stack-Zeiger (ESP)
  • Frame-Zeiger (EBP)
  • Segmentregister werden nicht gespeichert
  • Flags werden nicht gespeichert

Ein Task-Status enthält genügend Informationen, dass mit setjmp und longjmp Unterroutinen implementiert werden können.

setjmp muss vor longjmp aufgerufen werden. Die Routine, die setjmp aufgerufen und jmpb eingerichtet hat, muss aktiv bleiben und darf nicht zurückkehren, bevor longjmp aufgerufen wird. Sollte dies dennoch geschehen, ist das Ergebnis nicht vorhersehbar.

longjmp kann den Wert 0 nicht übergeben.Wird 0 in retval übergeben, ersetzt longjmp den Wert durch 1.

Rückgabewert

Keiner.

Beispiel



 #include <stdio.h>
 #include <setjmp.h>
 #include <stdlib.h>
 void subroutine(jmp_buf);
 int main(void)
 {
 
     int value;
     jmp_buf jumper;
     value = setjmp(jumper);
     if (value != 0)
     {
        printf("Longjmp with value %d\n", value);
        exit(value);
     }
     printf("About to call subroutine ... \n");
     subroutine(jumper);
     return 0;
 }
 void subroutine(jmp_buf jumper)
 {
     longjmp(jumper,1);
 }



Portabilität



POSIX Win32 ANSI C ANSI C++

+

+

+

+