在看《程式設計師的自我修養》時看到乙個以前沒見過的東西,為此記錄下來。(當然事後才知道原來早就被人寫爛了,啊哈哈哈)
非區域性跳轉在c語言中是乙個備受爭議的機制。使用非區域性跳轉,可以實現從乙個函式體內向另乙個事先登記過的函式體內跳轉,不必擔心堆疊混亂。
請看例項:
//執行結果如下:setjmp.c
//非區域性跳轉測試用例
#include
#include
jmp_buf b;
void
jmp_test()
intmain()
else
printf(
"---- main() end ----\n");
return0;
}
longjmp() 的作用就是讓程式的執行流回到當初setjmp()的時刻,並且返回由longjmp指定的返回值(第二個引數)
就好像讓程式」時光倒流「。
當然,這絕對不是結構化程式設計。
C 初學習之錯誤處理 非區域性跳轉
通常情況,不使用goto語句的情況下,函式會返回到他被呼叫的位置。但是使用可以使乙個函式直接跳轉到另一函式,不需要返回。中最重要的內容是setjmp巨集和longjmp函式。setjmp巨集 標記 程式的乙個位置 longjmp函式可以跳轉到之前所標記的位置。該強大的機制主要運用在錯誤處理之中。1 ...
非區域性靜態物件
使用未被初始化的物件無異於蠻幹。建構函式可以確保物件在建立時被初始化,難道不是這樣嗎?是,也不是。在某個特定的被編譯單元 即原始檔 中,可能一切都不成問題 但如果在某個被編譯單元中,乙個物件的初始化要依賴於另乙個被編譯單元中的另乙個物件的值,並且這第二個物件本身也需要初始化,事情就會變得更複雜。例如...
vue中區域性頁面跳轉 vue實現區域性重新整理
export default inject reload 注入 methods mycallback this.reload 區域性重新整理 其他的重新整理頁面方法 window.location.reload 有白屏 預設引數是 false,它會用 http 頭 if modified since...