c的異常處理學習

2021-07-01 20:16:43 字數 890 閱讀 2077

如題,源於對博主bigloomy的學習

先看**

#include #include jmp_buf buf;

void error_code(void)

int main()

else

printf("出現錯誤除數為0\n");

發現**執行流被改變了,真是神奇

看看維基百科怎麼解釋的

setjmp.h

是c標準函式庫

中提供「非本地跳轉」的

標頭檔案:

控制流偏離了通常的子程式呼叫與返回序列。互補的兩個函式setjmp與longjmp提供了這種功能。

jmp_buf
就是乙個指標型別,在每次setjmp(buff)時,就是將此處**的eip儲存起來,

執行longjmp(buff,num)就是跳轉到setjmp設定的程式斷點處,並返回num引數,放setjpm再執行一次,並返回num引數。

為此做乙個實驗

int main( void )

printf("cnt %d\n",cnt++); //列印

running

cnt 0

func1 return value:1

cnt 1

func2 return value:2

cnt 2

func3 return value:3

這樣可以說

異常處理學習

1 異常的使用場合 1 應用程式 2 庫 最好不要捕獲異常,除非某個異常表示的是 可以處理的情況 但要假定呼叫 可以處理他們。2 net 執行時可以把整個程式放在另乙個更大的 try塊中,如果發生的異常 沒有處理,程式流就會退出程式,由 net 執行時中的 catch 塊捕獲它。會導致程式執行中斷,...

C 之異常處理學習筆記

throw語句用於將異常物件丟擲,throw語句將異常丟擲,如果在當前函式中沒有try catch語句能夠處理該異常,則當前函式將立即返回。異常被傳遞到上層呼叫函式,仍然需要try catch語句進行處理,如果上層函式也沒有能力處理該異常,則異常繼續向更上層函式的函式傳遞。如果在函式呼叫棧中的所有函...

異常處理學習筆記

arm處理器的工作模式 使用者模式user 快速中斷模式fiq 處部中斷模式irq 特權模式supervisor 資料訪問中止模式abort 未定義指令中止模式undefined 系統模式system 1一上電,cpu處於 supervisor svc 管理模式 2發生中斷,cpu進入 riq 外部...