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
的範例。