63 C語言異常處理

2021-08-19 21:44:17 字數 1493 閱讀 5051

異常的概念:程式在執行過程中可能產生異常,異常與bug的區別:

異常是程式執行時可預料的執行分支。bug是程式中的錯誤,是不被預期的執行方式。

異常:執行時除0的情況,需要開啟的外部檔案,陣列訪問時越界。

bug:使用野指標,堆陣列使用結束後未釋放,選擇排序無法處理長度為0的陣列。

c語言處理方式:if...else...

#include

#include

using namespace std;

double divide(double a, double b, int* valid)

else

return ret;

}int main(int argc, char *argv)

else

return 0;

缺陷:dibide函式有3個引數,難以理解。divide函式呼叫後必須判斷 valid 代表的結果,當valid為true時,運算結果正常,當valid為false時,運算過程出現異常。

通過setjmp()和longjmp()進行優化:

int setjmp(jmp_buf env):將當前上下文儲存在 jmp_buf 結構體中。

void longjmp(jmp_buf env,int val):從 jmp_buf 結構體中恢復setjmp()儲存的上下文,最終從setjmp函式呼叫點返回,返回值為val。

改進:#include

#include

#include //包含setjmp()和longjmp()

using namespace std;

static jmp_buf env;  //儲存程式執行上下文

double divide(double a, double b)

else

return ret;

}int main(int argc, char *argv)

else

return 0;

c語言中的經典異常處理方式會使得程式邏輯中混入大量的處理異常的**。正常邏輯**和異常處理**混合在一起,導致**迅速膨脹,難以維護。

#include

#include

using namespace std;

#define success           0 

#define invalid_pointer   -1

#define invalid_length    -2

#define invalid_parameter -3

int memset(void* dest, unsigned int length, unsigned char v)

if( length < 4 )

if( (v < 0) || (v > 9) )

unsigned char* p = (unsigned char*)dest;

for(int i=0; i程式中不可避免會發生異常,是可預見的,c中通過if..else處理異常。

63 C語言異常處理

目錄 1.異常處理 程式設計實驗 除法操作異常處理 2.異常處理的方式 程式設計實驗 除法操作異常處理優化 例項分析 異常處理 分析 3.小結 異常的概念 異常是程式執行時可預料的執行分支 bug是程式中的錯誤,是不被預期的執行方式 異常 exception 和bug的對比 異常執行時產生除0的情況...

6 3 C語言switch語句

用 if.else 語句在處理多分支的時候,分支太多就會顯得不方便,且容易出現 if 和 else配對出現錯誤的情況,在 c 語言中提供了另外一種多分支選擇的語句 switch 語句,它的基本語法格式如下 switch 表示式 它的執行過程是 首先計算 表示式 的值,然後從第乙個 case 開始,與...

第63課 C語言異常處理

1.1 程式在執行過程中可能產生 異常 1.2 異常 exception 與bug 的區別1.2.1 異常 是程式執行時 可預料 的執行分支 1.2.2 bug 是程式是的錯誤,是 不被預期 的執行方式 2.1 異常 如執行時產生 除0 的情況 需要開啟的 外部檔案不存在 陣列訪問時 越界 2.2 ...