C语言setjmp函数使用
生活随笔
收集整理的這篇文章主要介紹了
C语言setjmp函数使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
C語言中可以使用goto進行程序跳轉,但是goto只能使用在一個函數內部,不能實現在不同函數之間的跳轉,C語言因此提供了setjmp和longjmp函數實現此功能,一般進行異常處理。 從函數名稱可以看到,一個是設置跳轉點,另一個實現長距離的跳轉。我們可以再一個函數內部調用setjmp函數設置一個跳轉點,在另一個函數中調用longjmp進行跳轉,我們需要定義一個jmp_buf類型變量保存跳轉信息。 eg: ? jmp_buf?jb?; ? void?main?() { ????if?(setjmp?(jb) == 0) ??? { ????????longjmp(jb?, 1); ??? } ????else ??? { ????????printf("jmp point 1"?); ??? }? } 調用longjmp調用時,第二參數會作為setjmp函數的返回值,因此我們還可以用一個switch語句多個分支進行處理。 eg: jmp_buf?jb?; ? void?main?() { ????int?code?=?setjmp(?jb); ????switch(code?) ??? { ????case?0: ????????longjmp(jb?, 1); ????????break; ????case?1: ????????printf("jmp point 1"?); ????????break; ????default: ????????printf("jmp point code is : %d"?,?code); ????????break; ??? } } 看云風的說法,調用longjmp跳轉時并不是在匯編級別的直接跳轉,還進行了其他操作,看匯編我們也可以看到,程序并不是進行直接跳轉,而是進行了一大堆操作,這樣的跳轉可以用作一場處理,類似于C++中的try,catch操作,我自己沒有大量用過,網上說法是在不熟悉的情況下不贊成使用,這些函數也只在大型的項目中使用,而且程序員對此函數的用法十分嫻熟。
轉載于:https://www.cnblogs.com/ourroad/p/3212286.html
總結
以上是生活随笔為你收集整理的C语言setjmp函数使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: POJ 1556 The Doors (
- 下一篇: poj 1797(最短路变形)