關於非區域性跳轉

2022-01-12 04:30:37 字數 511 閱讀 9388

在看《程式設計師的自我修養》時看到乙個以前沒見過的東西,為此記錄下來。(當然事後才知道原來早就被人寫爛了,啊哈哈哈)

非區域性跳轉在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...