Atari Logo
Atari Computer

Hauptseite -
Welches System? -
Hardware -
Software -
Emulatoren -
Internet
MausNet
Programmieren
Verweise
Über

C

Home Die ANSI Bibliotheken stdarg.h signal.h

13.8 setjmp.h

Die Definitionen aus setjmp.h erlauben es, den normalen Ablauf eines Programms zu umgehen. Damit wird üblichereise im Fehlerfall direkt aus tief verschachtelten Funktionsaufrufen zurückgesprungen. Leider wird hierdurch der Programmablauf etwas durchbrochen. Bei einer guten Aufteilung eines Programms auf Module und Bibliotheken, die auch allgemeingültig verwendbar sind, sollten die Funktionen der Module sich geordnet beenden und einen entsprechenden Returnwert liefern.

void longjmp(jmp_buf jmp_buffer, int return_value);
Mit dieser Funktion stellt man den Zustand wieder her, der mit setjmp gespeichert wurde. Die Programmausführung geht dann so weiter, als wurde setjmp mit dem Returnwert return_value, der ungleich 0 sein muß, beendet. Die Funktion, aus der setjmp aufgerufen wurde, darf noch nicht beendet sein! Globale Variablen haben wieder den Wert von vor dem Aufruf von setjmp, der Wert von automatischen Variablen aus der Funktion, die setjmp aufruft, ist undefiniert.
 
int setjmp(jmp_buf jmp_buffer);
Diese Funktion speichert den aktuellen Zustand in jmp_buffer ab, um ihn spaäter wieder anspringen zu können. Diese Funktion liefert in diesem Fall 0 zurück. Wenn mit longjmp zu dieser Stelle zurück gesprungen wird, befindet man sich nach diesem Aufruf, aber mit einem Returnwert ungleich 0.
 

Damit das Verhalten etwas deutlicher wird, folgt ein kleines Beispiel.

#include <stdio.h>
#include <setjmp.h>

int i;

int main(void)
{
   jmp_buf TestEnv;

   i = 0;
   printf("i vor setjmp = %d\n", i);
   if (setjmp(TestEnv) == 0)
   {
      puts("direkter Aufruf");
          i = 4;
      printf("i vor longjmp = %d\n", i);
          longjmp(TestEnv, 1);
   }
   else
   {
      puts("hierher durch Aufruf von longjmp");
      printf("i nach setjmp = %d\n", i);
   }
   puts("Programmende");
}

Home Die ANSI Bibliotheken stdarg.h signal.h


Best viewed with any browser English version not yet available.

Änderungen und Irrtümer vorbehalten. Letzte Änderung:
14 September 2001.
Home - Mail an den Webmaster - Impressum