RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C++程序異常處理機(jī)制是什么

汽車電子技術(shù) ? 來源:嵌入式情報(bào)局 ? 作者: 情報(bào)小哥 ? 2023-02-21 10:37 ? 次閱讀

大家好,我是情報(bào)小哥~

1、什么是異常處理

有經(jīng)驗(yàn)的朋友應(yīng)該知道,在正常的C和C++編程過程中難免會(huì)碰到程序不按照原本設(shè)計(jì)運(yùn)行的情況。

最常見的有除法分母為零,數(shù)組越界,內(nèi)存分配失效、打開相應(yīng)文件失敗等等。

一個(gè)程序的健壯不僅僅有算法上的優(yōu)越性,還存在程序?qū)Ω鞣N異常情況的識(shí)別和處理能力,如果對(duì)這些異常沒有得到較好的處理,就非常容易引起程序的奔潰。

那么C++設(shè)計(jì)了一套異常處理機(jī)制,一方面能夠使得異常處理和正常運(yùn)行代碼進(jìn)行分離,使得程序更加模塊化;另一方面,C++的異常處理可以不需要異常處理在異常發(fā)生時(shí)的同一個(gè)函數(shù),而是可以在更上層合適的位置進(jìn)行處理。

下面一起看看C++的異常處理:

2、異常處理語法

C++異常處理涉及到3個(gè)關(guān)鍵字:

throw---拋出一個(gè)異常,帶參數(shù)
try---用于標(biāo)識(shí)可能會(huì)出現(xiàn)異常的代碼段
catch--是用于標(biāo)識(shí)異常處理的代碼段

下面小哥就一個(gè)例子來說明一下他們的使用方法:

#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)識(shí)的為程序正常運(yùn)行的代碼段,所以首先打印"Run Normal"字符串,由于遇到了throw拋出此處程序存在異常,程序便會(huì)跳出try所標(biāo)識(shí)的代碼段,然后尋找catch所標(biāo)識(shí)的異常處理代碼段,這便會(huì)匹配到了正下方的catch輸出"Error : 2”字樣。

3、try-catch注意事項(xiàng)

上面的例子挺簡(jiǎn)單的,不過異常處理機(jī)制還有很多值得注意的使用方法:

1、當(dāng)throw拋出異常以后,會(huì)以函數(shù)調(diào)用的方式一層一層的尋找相應(yīng)的catch,如果當(dāng)前函數(shù)層沒有找到會(huì)立馬返回到上層函數(shù)進(jìn)行查找,如果一直沒有找到程序就會(huì)停止運(yùn)行。

圖片

下面寫了一個(gè)demo驗(yàn)證一下:

#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;
}

該程序最后運(yùn)行的結(jié)果與前面的是一致的,這樣函數(shù)內(nèi)部的異常都可以拋出來最后統(tǒng)一處理。

2、同一個(gè)try可以帶多個(gè)catch用于不同異常的處理。且不同的catch依次匹配異常參數(shù),匹配后便會(huì)執(zhí)行,否則會(huì)繼續(xù)往上層進(jìn)行catch匹配。

老規(guī)矩,寫個(gè)代碼驗(yàn)證一下:

#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ù)往上層進(jìn)行catch匹配,直到匹配到main函數(shù)中的catch(float a)才成功。

最 后

好了,這里小哥就簡(jiǎn)單介紹了C++異常處理try-catch,本系列文章后續(xù)還會(huì)更新,記得關(guān)注學(xué)習(xí)哦。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4327

    瀏覽量

    62569
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2108

    瀏覽量

    73618
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4779

    瀏覽量

    68521
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    寄存器/指令集/中斷、異常處理機(jī)制介紹

    寄存器指令集中斷、異常處理機(jī)制
    發(fā)表于 01-13 07:56

    INtime RTOS內(nèi)部的關(guān)鍵處理機(jī)制是什么

    INtime RTOS內(nèi)部的關(guān)鍵處理機(jī)制是什么?INtime RTOS內(nèi)部的關(guān)鍵處理機(jī)制有哪些相關(guān)的應(yīng)用案例?
    發(fā)表于 09-29 06:28

    單片機(jī)的中斷處理機(jī)制

    單片機(jī)的中斷處理機(jī)制什么是中斷?為什么要使用中斷(中斷的特點(diǎn))什么是中斷源?中斷源有哪些中斷機(jī)制的流程中斷優(yōu)先級(jí)多個(gè)中斷同時(shí)發(fā)生什么是中斷?當(dāng)CPU執(zhí)行程序時(shí),由于發(fā)生了某種隨機(jī)的事件(內(nèi)部或外部
    發(fā)表于 12-07 11:14

    Cortex-M3的異常處理機(jī)制分析

    Cortex-M3的異常處理機(jī)制分析  詳細(xì)闡述CortexM3異常的分類、優(yōu)先級(jí)、進(jìn)入和退出,以及在CortexM3異常處理機(jī)制
    發(fā)表于 03-29 15:07 ?2003次閱讀
    Cortex-M3的<b class='flag-5'>異常</b><b class='flag-5'>處理機(jī)制</b>分析

    如何處理Linux下C++異常

     在C++中,無論何時(shí)在處理程序內(nèi)捕獲一個(gè)異常,關(guān)于該異常來源的信息都是不為人知的。異常
    發(fā)表于 07-15 09:44 ?1998次閱讀

    C++異常機(jī)制探討

    C++異常機(jī)制為我們提供了更好的解決方法。異常處理的基本思想是:當(dāng)出現(xiàn)錯(cuò)誤時(shí)拋出一個(gè)異常,希望
    發(fā)表于 11-23 11:04 ?3471次閱讀
    <b class='flag-5'>C++</b><b class='flag-5'>異常</b><b class='flag-5'>機(jī)制</b>探討

    Java中的異常處理機(jī)制

    編寫異常處理代碼的建議 如果你寫方法時(shí)沒辦法處理未知意外情況,可以考慮在方法的聲明中用throws關(guān)鍵字把檢查型異常傳播出去,強(qiáng)制要求客戶端程序
    發(fā)表于 03-26 11:44 ?6次下載

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

    本文檔的詳細(xì)介紹的是Java程序設(shè)計(jì)教程之異常處理的詳細(xì)資料說明主要內(nèi)容包括了:1 什么是異常,2異常
    發(fā)表于 02-22 10:27 ?13次下載
    Java<b class='flag-5'>程序</b>設(shè)計(jì)教程之<b class='flag-5'>異常</b><b class='flag-5'>處理</b>的詳細(xì)資料說明

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

    本文檔的詳細(xì)介紹的是C++程序設(shè)計(jì)教程之C++工具的詳細(xì)資料說明主要內(nèi)容包括了:1. 異常處理,2. 命名空間,3. 使用早期的函數(shù)庫
    發(fā)表于 03-14 16:39 ?4次下載
    <b class='flag-5'>C++</b><b class='flag-5'>程序</b>設(shè)計(jì)教程之<b class='flag-5'>C++</b>工具的詳細(xì)資料說明

    Java高級(jí)編程之異常處理

    對(duì)于我們所開發(fā)的程序而言,錯(cuò)誤是無法避免的。本文闡述了如何運(yùn)用java的異常處理機(jī)制為我們控制和處理異常的出現(xiàn),從而保證
    發(fā)表于 07-08 16:14 ?19次下載
    Java高級(jí)編程之<b class='flag-5'>異常</b><b class='flag-5'>處理</b>

    C++異常機(jī)制底層原理與實(shí)際應(yīng)用詳細(xì)說明

    我們?cè)趯?duì) vector 做 push 操作的時(shí)候,或者對(duì)某個(gè)指針做 new 操作的時(shí)候,如果沒有做異常處理,一旦系統(tǒng)內(nèi)存不夠用了,程序是會(huì)被 terminate 掉的。這就要求我們熟悉 C++
    的頭像 發(fā)表于 11-22 11:34 ?3184次閱讀

    總結(jié):ARM的異常處理機(jī)制分析資料下載

    電子發(fā)燒友網(wǎng)為你提供總結(jié):ARM的異常處理機(jī)制分析資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考設(shè)計(jì)、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發(fā)表于 04-15 08:45 ?7次下載
    總結(jié):ARM的<b class='flag-5'>異常</b><b class='flag-5'>處理機(jī)制</b>分析資料下載

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

    電子發(fā)燒友網(wǎng)站提供《基于ARM核的嵌入式系統(tǒng)異常處理機(jī)制的設(shè)計(jì).pdf》資料免費(fèi)下載
    發(fā)表于 10-27 09:00 ?0次下載
    基于ARM核的嵌入式系統(tǒng)<b class='flag-5'>異常</b><b class='flag-5'>處理機(jī)制</b>的設(shè)計(jì)

    介紹C語言中錯(cuò)誤處理異常處理的一些常用的方法和策略

    C語言是一種低級(jí)的、靜態(tài)的、結(jié)構(gòu)化的編程語言,它沒有提供像C++或Java等高級(jí)語言中的異常處理機(jī)制,例如try-catch-finally等。
    的頭像 發(fā)表于 02-28 14:25 ?616次閱讀

    TI C64x+ DSP內(nèi)核異常處理機(jī)制的應(yīng)用

    電子發(fā)燒友網(wǎng)站提供《TI C64x+ DSP內(nèi)核異常處理機(jī)制的應(yīng)用.pdf》資料免費(fèi)下載
    發(fā)表于 08-28 11:54 ?0次下載
    TI <b class='flag-5'>C</b>64x+ DSP內(nèi)核<b class='flag-5'>異常</b><b class='flag-5'>處理機(jī)制</b>的應(yīng)用
    RM新时代网站-首页