C語言標準庫概覽詳述[5]-跳轉

頭文件<setjmp.h>中的說明提供了一種避免通常的函數調用和返回順序的途徑,特別的,它允許立即從一個多層嵌套的函數調用中返回。

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()後有了改變,那麼就變成未定義的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章