setjmp
Uloží aktuální stav programu.
Syntaxe
int setjmp(
jmp_buf env
);
Parametry
env
Proměnná, ve které je prostředí uloženo.
Vrácená hodnota
Vrátí hodnotu 0 po uložení prostředí zásobníku. Pokud setjmp
se vrátí z důvodu longjmp
volání, vrátí value
argument , longjmp
nebo pokud value
je argument longjmp
0, setjmp
vrátí hodnotu 1. Nevrátí se žádná chyba.
Poznámky
Funkce setjmp
uloží prostředí zásobníku, které můžete následně obnovit pomocí longjmp
. Při použití společně setjmp
a longjmp
poskytnout způsob, jak spustit non-local goto
. Obvykle se používají k předání řízení provádění do zpracování chyb nebo kódu obnovení v dříve volané rutině bez použití normálních konvencí volání nebo návratu.
Volání pro setjmp
uložení aktuálního prostředí zásobníku do env
. Následné volání pro longjmp
obnovení uloženého prostředí a vrácení ovládacího prvku do bodu těsně po odpovídajícím setjmp
volání. Všechny proměnné (kromě proměnných registru) přístupné rutině přijímajícího ovládacího prvku obsahují hodnoty, které měly při longjmp
volání.
Není možné použít setjmp
přechod z nativního na spravovaný kód.
Specifické pro Microsoft
V kódu Jazyka C++ v systému Windows longjmp
používá stejnou sémantiku stack-unwinding jako kód zpracování výjimek. Je bezpečné použít na stejných místech, kde je možné vytvořit výjimky jazyka C++. Toto použití ale není přenosné a přináší několik důležitých upozornění. Podrobnosti najdete v tématu longjmp
.
END Microsoft Specific
Poznámka:
V přenosném kódu C++ nemůžete předpokládat setjmp
a longjmp
podporovat sémantiku objektů jazyka C++. Konkrétně má setjmp
/longjmp
dvojice volání nedefinované chování, pokud nahradí setjmp
a longjmp
zavolá catch
throw
všechny ne-triviální destruktory pro všechny automatické objekty. V programech C++ doporučujeme použít mechanismus zpracování výjimek jazyka C++.
Další informace naleznete v tématu Použití setjmp
a longjmp
.
Požadavky
Rutina | Požadovaný hlavičkový soubor |
---|---|
setjmp |
<setjmp.h> |
Další informace o kompatibilitě najdete v tématu Kompatibilita.
Příklad
Podívejte se na příklad pro _fpreset
.