5.1 setjmp
int setjmp(jmp_buf env);
setjmp()宏把當前狀態信息保存到env中,供以後longjmp()恢復狀態信息時使用。如果是直接調用setjmp(),那麼返回值爲0;如果是由於調用longjmp()而調用setjmp(),那麼返回值非0。setjmp()只能在某些特定情況下調用,如在if語句、switch語句及循環語句的條件測試部分以及一些簡單的關係表達式中。
5.2 longjmp
void longjmp(jmp_buf env, int val);
longjmp()用於恢復由最近一次調用setjmp()時保存到env的狀態信息。當它執行完時,程序就象setjmp()剛剛執行完並返回非0值val那樣繼續執行。包含setjmp()宏調用的函數一定不能已經終止。所有可訪問的對象的值都與調用longjmp()時相同,唯一的例外是,那些調用setjmp()宏的函數中的非volatile自動變量如果在調用setjmp()後有了改變,那麼就變成未定義的。