使用 setjmp 和 longjmp

當 setjmp 和 longjmp 一起使用時 ,它們會提供執行非本機 goto 的方法。 它們通常會在 C 程式碼中使用,將執行控制項傳遞至先前呼叫的常式中的錯誤處理或復原程式碼,而不使用標準呼叫或傳回慣例。

警告

由於 setjmplongjmp 不支援在 C++ 編譯器之間可移植地正確解構堆疊框架物件,而且由於它們可能會藉由防止本機變數優化而降低效能,因此不建議其在 C++ 程式中使用。 建議您改用 trycatch 建構。

如果您決定在 C++ 程式中使用 setjmplongjmp ,也包含 < setjmp.h 或 < setjmpex.h >> ,以確保函式與結構化例外狀況處理 (SEH) 或 C++ 例外狀況處理之間的正確互動。

Microsoft 特定的

如果您使用 /EH 選項來編譯 C++ 程式碼,則會在堆疊回溯期間呼叫本機物件的解構函式。 不過,如果您使用 /EHs 或 /EHsc 進行編譯,並使用 noexcept 呼叫 longjmp 其中一個函式,則根據優化器狀態,該函式的解構函式回溯可能不會發生。

在可攜式程式碼中,執行呼叫時 longjmp ,明確不保證標準明確解構框架架構物件的解構,而且其他編譯器可能不支援。 若要讓您知道,在警告層級 4,呼叫 setjmp 會導致警告 C4611:'_setjmp' 與 C++ 物件解構之間的互動不可移植。

END Microsoft 特定的

另請參閱

混合 C (結構化) 和 C++ 例外狀況