c++中錯誤分為:編譯時錯誤和執行時錯誤;
錯誤處理和除錯方法:
1)讓函式返回錯誤**;
2)使用assert()
函式:assert()
函式需要乙個輸入引數,它將測試這個輸入引數的真/假狀態。如果條件為真,什麼事情都不會發生;如果條件為假,程式將停止執行並報告乙個錯誤assertion failed!
。
3)捕獲異常;其基本語法為:
try
catch(exception)
每條* try 語句*至少要有一條配對的 catch 語句,c++允許我們定義多條catch語句。如果try語句塊無法找到乙個匹配的和適當的catch語句塊,它丟擲的異常將終止程式的執行,與根本沒使用異常的效果一樣。
catch(...){}
可以捕獲任何型別的異常,括號裡面是三個點。
我們可以用throw 保留字來丟擲乙個異常,比如throw 2;
, 在try語句塊裡沒有必要使用throw語句。
處理完異常之後,程式將繼續執行。即,只要在某個try語句塊裡執行過 throw 語句,它後面的所有語句(截止到這個 try 語句塊的末尾)將永遠也不會被執行。
讓函式丟擲異常:type functionname(arguments) throw (type);
,有時會省略 throw(type) 部分。
使用異常的基本原則是:
1)應該只用它們來處理確實不正常的情況;
2)作為一條原則,在構造器和析構器裡不應該使用異常。
如果打算使用物件作為異常,請記住:以「值傳遞」方式丟擲異常,以「引用傳遞」方式捕獲物件。比如:
try
catch(exceptionclass &e)
下面通過**舉例來體會一下c++的錯誤處理機制:
#define ndebug //在程式的.cpp檔案的開頭加上這條指令就可以讓程式裡面所有的 assert() 呼叫自動失效
#include
#include
/*這個標頭檔案列出了各種資料型別在給定作業系統上的取值範圍,並且把每種資料型別的最大可取值和最小可取值都分別定義為乙個常量,比如short_max、short_min、ushort_max、int_max、uint_max、ulong_max等*/
#include
unsigned
long f(unsigned
short num) throw(const
char *); //函式f將丟擲乙個const char *型別的異常(乙個文字字串)
int main(int argc, char** argv)
std::cout
<< "the number is "
<< n << std::endl;
trycatch(const
char *e) //try語句塊裡的**丟擲的 const char * 型別異常都將在這裡**獲,此處捕捉函式呼叫裡 throw 丟擲的異常
return0;}
unsigned
long f(unsigned
short num) throw(const
char*) //函式定義,求乙個整數的階乘,但其結果不能超出整數的最大值
if(tempmax < 1)
else
}
執行結果為:
please enter a
number:
7the number is 7
theright
result is 5040
please enter a
number:
72the number is 72
we cannot get
theright
result.
please input a smaller integer
andtry again.
c++入門(12):高階oop技術:過載操作符、多繼承和虛繼承 除錯和錯誤處理
1.除錯模式下執行 f5 非除錯模式下執行 ctrl f5 2.計算機的debug目錄下,有.pdb檔案,它們可以執行很多操作 向ide輸出除錯資訊 在執行應用程式期間檢視和編輯變數的值 暫停程式和重啟程式 在 的某個位置自動暫停程式的執行 一次執行程式中的一行 在應用程式的執行期間監視變數內容的變...
js錯誤處理和除錯
1 重點關注函式和可能導致函式執行失敗的因素。2 丟擲錯誤和使用try catch的時機 一般來說在應用程式架構較低的層次中經常會丟擲錯誤。這個層次並不會影響當前執行的 錯誤也得不到真正的處理。在多應用中使用的庫和應用內部多處使用的輔助函式時,丟擲錯誤後要提供詳盡的錯誤資訊。3 只捕獲確切知道該如何...
Python錯誤處理和除錯
錯誤處理 try.except.finally.try print try.r 10 0 print result r except zerodivisionerror as e print except e finally print finally.print end try.except di...