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呼...