setjmp

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu setjmp.h - Index


Header-Datei

setjmp.h

Kategorie

Verschiedene Routinen

Prototyp

int setjmp(jmp_buf jmpb);

Beschreibung

Trifft Vorbereitungen für ein nicht lokales goto.

setjmp erfasst in jmpb den vollständigen Task-Status und gibt 0 zurück.

Ein späterer Aufruf von longjmp mit jmpb stellt den erfassten Task-Status wieder her, und die Funktion kehrt dann so zurück, als wäre setjmp mit dem Wert val zurückgekehrt.

Ein Win32-Task-Status umfasst:

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

Ein Task-Status enthält genügend Informationen, dass mit setjmp 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. Ist sie zurückgekehrt, ist das Ergebnis nicht vorhersehbar.

setjmp ist für die Behandlung von Fehlern und Exceptions nützlich, die in Low-Level-Routinen eines Programms auftreten könnten.

Rückgabewert

Beim ersten Aufruf gibt setjmp 0 zurück. Kehrt setjmp über einen Aufruf von longjmp, gibt setjmp einen Wert ungleich Null zurück (wie im folgenden Beispiel).

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++

+

+

+

+