无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

知識分享:C語言如何對異常進(jìn)行捕獲?

2022-02-19 16:37 作者:C語言編程__Plus  | 我要投稿

C++中可以使用try...catch對異常進(jìn)行捕獲,C語言呢?可能很多人都不知道,C語言中也有類似的接口,可以保存程序運(yùn)行的位置然后在特定的位置進(jìn)行恢復(fù)使得程序能夠回到先前保存的地方。而這整個(gè)功能的主要依靠setjmp和longjmp來實(shí)現(xiàn)。

1 int setjmp(jmp_buf env)

setjmp需要被先調(diào)用,調(diào)用之后,setjmp就保存了一份程序的計(jì)數(shù)器和當(dāng)前棧頂指針,當(dāng)然,根據(jù)需要也可以保存一些變量的初始化信息。返回返回值為0。?使用方法如下面代碼所示:


2 void longjmp(jmp_buf?env,int val)

在調(diào)用了setjmp后調(diào)用longjmp可以恢復(fù)保存的值并有效的將setjmp保存的計(jì)數(shù)器和棧信息恢復(fù)到之前的狀態(tài),這個(gè)過程也是堆棧展開的過程。因?yàn)閘ongjmp是回到原來保存程序狀態(tài)的位置,因此也可以稱之為從哪里來到哪里去。在上面的代碼中使用longjmp后,程序執(zhí)行效果如下所示:


如上,在調(diào)用TestSuit后,函數(shù)里面因?yàn)檎{(diào)用了longjmp因此程序狀態(tài)恢復(fù)到setjmp的位置,又因?yàn)樵趌ongjmp的第二個(gè)參數(shù)設(shè)置了setjmp的返回值,因此TestSuit函數(shù)中l(wèi)ongjmp后的代碼將不被執(zhí)行。程序返回到main函數(shù),執(zhí)行if條件值為真后的語句。上面代碼的運(yùn)行結(jié)果為:


- EOF -

寫在最后:對于準(zhǔn)備學(xué)習(xí)C/C++編程的小伙伴,如果你想更好的提升你的編程核心能力(內(nèi)功)不妨從現(xiàn)在開始!

微信公眾號:C語言編程學(xué)習(xí)基地

C語言零基礎(chǔ)入門教程(83集全)

整理分享(多年學(xué)習(xí)的源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門教程)

歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長比自己琢磨更快哦!

編程學(xué)習(xí)書籍分享:


知識分享:C語言如何對異常進(jìn)行捕獲?的評論 (共 條)

分享到微博請遵守國家法律
大竹县| 长沙市| 巴林右旗| 岳池县| 龙海市| 蓝山县| 罗定市| 通城县| 青岛市| 石河子市| 侯马市| 苏尼特右旗| 高尔夫| 尉犁县| 上思县| 离岛区| 高州市| 沭阳县| 印江| 吉首市| 如皋市| 平乡县| 西畴县| 余干县| 图片| 宜州市| 新巴尔虎右旗| 内丘县| 临泉县| 商洛市| 安福县| 洛南县| 南郑县| 集贤县| 荣昌县| 辛集市| 长宁县| 邳州市| 嵩明县| 视频| 封丘县|