跳轉函式 setjmp 和 longjmp

2022-06-17 15:18:12 字數 819 閱讀 1366

setjmp 和 longjmp 是一對跳轉函式,也是神一樣的函式,這種函式比goto都強大,但功能跟goto差不多

既然,**規範裡要求不能使用goto,所以setjmp 和 longjmp 這個也基本不用。

當然,前提特殊情況下是可以的。例如特殊處理,實現自己的異常處理**

關於 setjmp 和 longjmp 的解釋,不再重複,網上很多。

這裡記錄下步驟,明明白白怎麼回事:

有了上面的簡單化的知識以後,再來看看以下**:(仿try 可以自己寫try 牛逼吧)

然後,只要**裡出現 longjmp 並第二個引數不等於0,就可以進入我們另外乙個處理(catch)

先看看,throw的**,當我們自己判斷到程式出現異常時候,可以參考如下:

然後,再來看看catch的**,其實很簡單,就相當於處理

這個if 之外的內容

這樣就可以完成我們的跳轉。。。也是比較巧妙的應用,

setjmp函式和longjmp函式

這兩個函式是為了解決深層次函式巢狀返回的問題。函式原型 include int setjmp jmp buf env 返回值 若直接呼叫則返回0,若從longjmp呼叫返回則返回非0值。void longjmp jmp buf env,int val 在希望返回的位置呼叫setjmp,引數env通常...

setjmp和longjmp函式使用詳解

setjmp和longjmp函式使用詳解 wykwdy007的專欄 部落格頻道 csdn.net 非區域性跳轉語句 setjmp和longjmp函式。非區域性指的是,這不是由普通c語言goto,語句在乙個函式內實施的跳轉,而是在棧上跳過若干呼叫幀,返回到當前函式呼叫路徑上的某乙個函式中。includ...

setjmp和longjmp函式使用詳解

非區域性跳轉語句 setjmp和longjmp函式。非區域性指的是,這不是由普通c語言goto,語句在乙個函式內實施的跳轉,而是在棧上跳過若干呼叫幀,返回到當前函式呼叫路徑上的某乙個函式中。include int setjmp jmp buf env 返回值 若直接呼叫則返回0,若從longjmp呼...