setjmp.h er header-filen for standard C - biblioteket , der erklærer makroer og datatype for ikke-lokale spring [1] . Der er en goto-sætning i C , der giver dig mulighed for at hoppe hvor som helst i en funktion (med nogle forbehold), men du kan ikke bruge den til at hoppe mellem funktioner.
Biblioteket erklærer en datatype, jmp_bufder er et array , og som kan bruges til at gemme og gendanne programmets eksekveringskontekst. Typen inkluderer ikke information om flydende komma -konteksten , status for åbne filer eller andre komponenter [1] .
Standarden erklærer to funktioner: setjmp()(kan være en makro) og longjmp()til henholdsvis at gemme og gendanne konteksten. Funktionen setjmp()gemmer konteksten i env- variablen og returnerer 0, hvis det var et direkte kald, eller en værdi, der ikke er nul, hvis det var en retur fra longjmp()[1] .
Standarden forbyder at gemme resultatet af setjmp-funktionen, hvilket pålægger begrænsninger på stedet for opkaldet.
Funktionen longjmp() returnerer udførelse til kalderen setjmp()med værdien val. Alle manuelle hukommelsesobjekter bevarer deres værdi. Automatiske objekter med kvalifikationen bevarer også deres værdi volatile.
Hvis funktionen blev kaldt uden et tilsvarende kald setjmp()til , eller hvis funktionen, som udførelsen gendannes i, allerede er afsluttet, er adfærden udefineret.
Brug af setjmp()og longjmp()kan føre til hukommelseslækager, hvis allokering sker mellem opkald til disse funktioner [1] .
De bruges i en af undtagelseshåndteringsmetoderne - SJLJ, som står for "setjmp/longjmp" [2] . Denne mekanisme blev brugt i tidlige implementeringer af C++ undtagelser [3] .
Det kan også bruges i cooperativ multitasking [4] .