一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

C++程序異常處理機制是什么

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

大家好,我是情報小哥~

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í)哦。

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

    關(guān)注

    3

    文章

    4365

    瀏覽量

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

    關(guān)注

    22

    文章

    2116

    瀏覽量

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

    關(guān)注

    30

    文章

    4880

    瀏覽量

    70004
收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

    單片機的中斷處理機制

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

    Cortex-M3的異常處理機制分析

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

    如何處理Linux下C++異常

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

    C++異常機制探討

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

    Java中的異常處理機制

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

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

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

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

    本文檔的詳細(xì)介紹的是C++程序設(shè)計教程之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è)計教程之<b class='flag-5'>C++</b>工具的詳細(xì)資料說明

    Java高級編程之異常處理

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

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

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

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

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

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

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

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

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

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

    電子發(fā)燒友網(wǎng)站提供《TI C64x+ DSP內(nèi)核異常處理機制的應(yīng)用.pdf》資料免費下載
    發(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'>處理機制</b>的應(yīng)用