2 回答

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超10個(gè)贊
setjmp和logjmp是配合使用的,用它們可以實(shí)現(xiàn)跳轉(zhuǎn)的功能,和goto語句很類似,不同的是goto只能實(shí)現(xiàn)在同一個(gè)函數(shù)之內(nèi)的跳轉(zhuǎn),而setjmp和logjmp可以實(shí)現(xiàn)在不同函數(shù)間的跳轉(zhuǎn)
用法:
首先用setjmp設(shè)置跳轉(zhuǎn)的地點(diǎn),setjmp的參數(shù)buf是用來保存設(shè)置跳轉(zhuǎn)點(diǎn)時(shí)的函數(shù)使用的重要數(shù)據(jù),當(dāng)從其他函數(shù)跳轉(zhuǎn)回來,如果不用這個(gè)保存的數(shù)據(jù)恢復(fù)當(dāng)前函數(shù)的一些數(shù)據(jù)的話,跳轉(zhuǎn)回來是不能運(yùn)行的。第一次設(shè)置的時(shí)候setjmp返回值為0
使用longjmp就可以跳轉(zhuǎn)到setjmp的地方了,參數(shù)buf就是使用setjmp的時(shí)候保存的,而第二個(gè)參數(shù)會在跳轉(zhuǎn)以后把這個(gè)值讓setjmp返回的,也就是longjmp第二個(gè)參數(shù),就是跳轉(zhuǎn)到setjmp之后setjmp函數(shù)要返回的值
這個(gè)代碼里運(yùn)行步驟
1.先執(zhí)行setjmp,因?yàn)槭堑谝淮卧O(shè)置跳轉(zhuǎn)點(diǎn),返回值是0,不執(zhí)行if語句塊里的語句,
2.然后執(zhí)行b=5,b的值就是5了
3.再執(zhí)行l(wèi)ongjmp跳轉(zhuǎn)之后, 最后再執(zhí)行setjmp, 這時(shí)setjmp會返回1(也就是longjmp的第二個(gè)參數(shù)指定的值),就會執(zhí)行if語句塊里的語句----打印之后終止程序,這時(shí)b的值是5,就會打印出5來
- 2 回答
- 0 關(guān)注
- 724 瀏覽
添加回答
舉報(bào)