大家好,我是情報小哥~
1、什么是異常處理
有經(jīng)驗的朋友應(yīng)該知道,在正常的C和C++編程過程中難免會碰到程序不按照原本設(shè)計運行的情況。
最常見的有除法分母為零,數(shù)組越界,內(nèi)存分配失效、打開相應(yīng)文件失敗等等。
一個程序的健壯不僅僅有算法上的優(yōu)越性,還存在程序?qū)Ω鞣N異常情況的識別和處理能力,如果對這些異常沒有得到較好的處理,就非常容易引起程序的奔潰。
那么C++設(shè)計了一套異常處理機制,一方面能夠使得異常處理和正常運行代碼進行分離,使得程序更加模塊化;另一方面,C++的異常處理可以不需要異常處理在異常發(fā)生時的同一個函數(shù),而是可以在更上層合適的位置進行處理。
下面一起看看C++的異常處理:
2、異常處理語法
C++異常處理涉及到3個關(guān)鍵字:
throw---拋出一個異常,帶參數(shù)
try---用于標(biāo)識可能會出現(xiàn)異常的代碼段
catch--是用于標(biāo)識異常處理的代碼段
下面小哥就一個例子來說明一下他們的使用方法:
#include
using namespace std;
int main(int argc, char** argv) {
try{
cout<<"Run Normal"<throw 2; //拋出異常
cout<<"No arrived"<catch(int a) //異常代碼處理塊
{
cout<<"Error : "<return 0;
}
try所標(biāo)識的為程序正常運行的代碼段,所以首先打印"Run Normal"字符串,由于遇到了throw拋出此處程序存在異常,程序便會跳出try所標(biāo)識的代碼段,然后尋找catch所標(biāo)識的異常處理代碼段,這便會匹配到了正下方的catch輸出"Error : 2”字樣。
3、try-catch注意事項
上面的例子挺簡單的,不過異常處理機制還有很多值得注意的使用方法:
1、當(dāng)throw拋出異常以后,會以函數(shù)調(diào)用的方式一層一層的尋找相應(yīng)的catch,如果當(dāng)前函數(shù)層沒有找到會立馬返回到上層函數(shù)進行查找,如果一直沒有找到程序就會停止運行。
下面寫了一個demo驗證一下:
#include
using namespace std;
void FunctionDown(void)
{
cout<<"Run Normal"<throw 2; //拋出異常
cout<<"No arrived"<void FunctionMid(void)
{
FunctionDown();
}
void FunctionUp(void)
{
try
{
FunctionMid();
}
catch(int a) //異常代碼處理塊
{
cout<<"Error : "<int main(int argc, char** argv) {
FunctionUp();
return 0;
}
該程序最后運行的結(jié)果與前面的是一致的,這樣函數(shù)內(nèi)部的異常都可以拋出來最后統(tǒng)一處理。
2、同一個try可以帶多個catch用于不同異常的處理。且不同的catch依次匹配異常參數(shù),匹配后便會執(zhí)行,否則會繼續(xù)往上層進行catch匹配。
老規(guī)矩,寫個代碼驗證一下:
#include
using namespace std;
void FunctionDown(void)
{
cout<<"Run Normal"<//throw "bug"; //拋出異常
throw (float)3.14; //拋出異常
cout<<"No arrived"<void FunctionMid(void)
{
FunctionDown();
}
void FunctionUp(void)
{
try
{
FunctionMid();
}
catch(int a) //異常代碼處理塊
{
cout<<"Error : "<int main(int argc, char** argv) {
try
{
FunctionUp();
}
catch(float a) //異常代碼處理塊
{
cout<<"Error : "<catch(char const *str) //異常代碼處理塊
{
cout<<"Error : "<return 0;
}
最終由于FunctionMid內(nèi)的catch的參數(shù)無法匹配上,則繼續(xù)往上層進行catch匹配,直到匹配到main函數(shù)中的catch(float a)才成功。
最 后
好了,這里小哥就簡單介紹了C++異常處理try-catch,本系列文章后續(xù)還會更新,記得關(guān)注學(xué)習(xí)哦。
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4365瀏覽量
63857 -
C++
+關(guān)注
關(guān)注
22文章
2116瀏覽量
74575 -
代碼
+關(guān)注
關(guān)注
30文章
4880瀏覽量
70004
發(fā)布評論請先 登錄
相關(guān)推薦
INtime RTOS內(nèi)部的關(guān)鍵處理機制是什么
單片機的中斷處理機制
Cortex-M3的異常處理機制分析

Java中的異常處理機制
Java程序設(shè)計教程之異常處理的詳細(xì)資料說明

C++程序設(shè)計教程之C++工具的詳細(xì)資料說明

Java高級編程之異常處理

C++的異常機制底層原理與實際應(yīng)用詳細(xì)說明
總結(jié):ARM的異常處理機制分析資料下載

基于ARM核的嵌入式系統(tǒng)異常處理機制的設(shè)計

介紹C語言中錯誤處理和異常處理的一些常用的方法和策略
TI C64x+ DSP內(nèi)核異常處理機制的應(yīng)用

評論