當 setjmp 和 longjmp 一起使用時,它們會提供執行非本機 goto的方法。 它們通常會在 C 程式代碼中使用,將執行控制項傳遞至先前呼叫的例程中的錯誤處理或復原程式代碼,而不使用標準呼叫或傳回慣例。
警告
由於 setjmp 和 longjmp 不支援在C++編譯程式之間移植正確解構堆疊框架物件,而且由於它們可能會藉由防止局部變數的優化而降低效能,因此不建議在C++程式中使用它們。 建議您改用 try 和 catch 建構。
如果您決定在C++程式中使用 setjmp 和 longjmp ,也包含 <setjmp.h 或 setjmpex.h><,以確保函式與結構化例外狀況處理 (SEH) 或>C++例外狀況處理之間的正確互動。
Microsoft 特定的
如果您使用 /EH 選項來編譯C++程序代碼,則會在堆疊回溯期間呼叫本機物件的解構函式。 不過,如果您使用 /EHs 或 /EHsc 進行編譯,並使用 noexceptlongjmp其中一個函式,則根據優化器狀態,該函式的解構函式回溯可能不會發生。
在可攜式程式代碼中,執行呼叫時 longjmp ,明確不保證標準明確解構框架架構物件的解構,而且其他編譯程式可能不支援。 若要讓您知道,在警告層級 4 中,呼叫 setjmp 會導致警告 C4611:『_setjmp』 與C++對象解構之間的互動不可移植。
END Microsoft 特定的