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í.
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á.