setjmp

儲存程式的目前狀態。

語法

int setjmp(
   jmp_buf env
);

參數

env
儲存環境的變數。

傳回值

儲存堆疊環境之後,會傳回 0。 如果 setjmp 因為 longjmp 呼叫而傳回 ,則會傳回 valuelongjmp 引數,如果 value 的引數 longjmp 為 0,則會 setjmp 傳回 1。 沒有傳回錯誤。

備註

setjmp 函式會使用 longjmp 來儲存後續可還原的堆疊環境。 setjmplongjmp 一起使用時,可提供執行非區域 goto 的方式。 它們通常用來將執行控制項傳遞至先前呼叫的常式中的錯誤處理或復原程式碼,而不使用一般呼叫或傳回慣例。

呼叫 setjmp 會在 env 中儲存目前堆疊環境。 後續呼叫 longjmp 會還原儲存的環境,並將控制權傳給緊接在對應 setjmp 呼叫之後的時間點。 接收控制權之常式可存取的所有變數 (暫存器變數除外) 都會包含呼叫 longjmp 時所擁有的值。

您無法使用 setjmp 從原生程式碼跳到 Managed 程式碼。

Microsoft 特定的

在 Windows 上的 Microsoft C++ 程式碼中, longjmp 使用與例外狀況處理常式代碼相同的堆疊回溯語意。 在 C++ 例外狀況可以引發的相同位置使用是安全的。 不過,此使用方式無法移植,並隨附一些重要的注意事項。 如需詳細資訊,請參閱longjmp

END Microsoft 特定的

注意

在可攜式 C++ 程式碼中,您無法假設 setjmp 並支援 longjmp C++ 物件語意。 具體而言, setjmp/longjmp 如果取代 setjmplongjmpcatchthrow ,而且會針對任何自動物件叫用任何非簡單解構函式,則呼叫組具有未定義的行為。 在 C++ 程式中,建議您使用 C++ 例外狀況處理機制。

如需詳細資訊,請參閱 使用 setjmplongjmp

需求

常式 必要的標頭
setjmp <setjmp.h>

如需相容性詳細資訊,請參閱相容性

範例

請參閱 的 _fpreset 範例。

另請參閱

進程和環境控制
longjmp