setjmp

儲存程式的目前狀態。

語法

int setjmp(
   jmp_buf env
);

參數

env
儲存環境的變數。

傳回值

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

備註

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

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

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

Microsoft 特定的

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

END Microsoft 特定的

注意

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

如需詳細資訊,請參閱 使用 setjmp 和 longjmp。

需求

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

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

範例

請參閱 _fpreset 的範例。

另請參閱

進程和環境控制
longjmp