您的位置 首页 kreess

setjump和longjump函數及使用註意事項

轉載自:http://c.biancheng.net/view/389.html對錯誤處理而言,goto 語句隻能是在函數的局部作用域內跳轉,而不能實現跨函數跳轉。但在實際

轉載自:http://c.biancheng.net/view/389.html

對錯誤處理而言,goto 語句隻能是在函數的局部作用域內跳轉,而不能實現跨函數跳轉。但在實際錯誤處理中,經常會遇到這樣的場景:在一個深度嵌套的函數調用中發生瞭錯誤,需要放棄當前任務,從多層函數調用中返回,並且在較高層級的函數中繼續執行(或許是在 main() 函數中)。要做到這一點,可以讓每個函數都返回一個狀態值,由函數的調用者檢查並做相應處理。

很顯然,遇到這種場景,goto 語句就顯得無能為力瞭,而 setjmp 宏和 longjmp 函數組合就提供瞭這一功能,它們能夠提供一種在程序中實現“非本地局部跳轉”(non-local goto)的機制。其原型定義如下:

int setjmp(jmp_buf env);
void longjmp(jmp_buf env, int value);

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

返回顶部