Sdílet prostřednictvím


Používání setjmp/longjmp

Když jsou setjmp a longjmp používány společně, poskytují způsob provedení nemístního goto.Obvykle se používají k předání ovládacího prvku spuštění ke zpracování chyb nebo kódu obnovení v dříve volané rutině bez použití standardní konvence volání nebo vrácení.

Poznámka k upozorněníUpozornění

Nicméně protože setjmp a longjmp nepodporují sémantiku objektu C++ a vzhledem k tomu, že se může snížit výkon tím, že zabrání optimalizaci na lokálních proměnných, doporučujeme nepoužívat je v programech jazyka C++.Doporučujeme místo toho použít konstrukty trycatch.

Pokud se rozhodnete použít setjmp/longjmp v programu C++, také zahrňte SETJMP.H nebo SETJMPEX.H pro zajištění správné interakce mezi funkcemi a zpracováním výjimek C++.Použijete-li /EH pro kompilaci, destruktory pro místní objekty jsou volány během zásobníku unwind.Použijete-li /EHs pro kompilaci a jedna z funkcí volá funkci, která používá nothrow, a funkce, která používá nothrow, volá longjmp, pak destruktor unwind nemusí vzniknout v závislosti na optimalizátoru.

Pokud je v přenositelném kódu proveden nemístní příkaz goto, který volá longjmp, správná destrukce objektů založených na snímcích může být nespolehlivá.

Viz také

Referenční dokumentace

Kombinace výjimek v jazyce C (strukturované) a C++