0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C++程序异常处理机制是什么

汽车电子技术 来源:嵌入式情报局 作者: 情报小哥 2023-02-21 10:37 次阅读

大家好,我是情报小哥~

1、什么是异常处理

有经验的朋友应该知道,在正常的C和C++编程过程中难免会碰到程序不按照原本设计运行的情况。

最常见的有除法分母为零,数组越界,内存分配失效、打开相应文件失败等等。

一个程序的健壮不仅仅有算法上的优越性,还存在程序对各种异常情况的识别和处理能力,如果对这些异常没有得到较好的处理,就非常容易引起程序的奔溃。

那么C++设计了一套异常处理机制,一方面能够使得异常处理和正常运行代码进行分离,使得程序更加模块化;另一方面,C++的异常处理可以不需要异常处理在异常发生时的同一个函数,而是可以在更上层合适的位置进行处理。

下面一起看看C++的异常处理:

2、异常处理语法

C++异常处理涉及到3个关键字:

throw---抛出一个异常,带参数
try---用于标识可能会出现异常的代码段
catch--是用于标识异常处理的代码段

下面小哥就一个例子来说明一下他们的使用方法:

#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所标识的为程序正常运行的代码段,所以首先打印"Run Normal"字符串,由于遇到了throw抛出此处程序存在异常,程序便会跳出try所标识的代码段,然后寻找catch所标识的异常处理代码段,这便会匹配到了正下方的catch输出"Error : 2”字样。

3、try-catch注意事项

上面的例子挺简单的,不过异常处理机制还有很多值得注意的使用方法:

1、当throw抛出异常以后,会以函数调用的方式一层一层的寻找相应的catch,如果当前函数层没有找到会立马返回到上层函数进行查找,如果一直没有找到程序就会停止运行。

图片

下面写了一个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;
}

该程序最后运行的结果与前面的是一致的,这样函数内部的异常都可以抛出来最后统一处理。

2、同一个try可以带多个catch用于不同异常的处理。且不同的catch依次匹配异常参数,匹配后便会执行,否则会继续往上层进行catch匹配。

老规矩,写个代码验证一下:

#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内的catch的参数无法匹配上,则继续往上层进行catch匹配,直到匹配到main函数中的catch(float a)才成功。

最 后

好了,这里小哥就简单介绍了C++异常处理try-catch,本系列文章后续还会更新,记得关注学习哦。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4326

    浏览量

    62553
  • C++
    C++
    +关注

    关注

    22

    文章

    2108

    浏览量

    73603
  • 代码
    +关注

    关注

    30

    文章

    4774

    浏览量

    68503
收藏 人收藏

    评论

    相关推荐

    寄存器/指令集/中断、异常处理机制介绍

    寄存器指令集中断、异常处理机制
    发表于 01-13 07:56

    INtime RTOS内部的关键处理机制是什么

    INtime RTOS内部的关键处理机制是什么?INtime RTOS内部的关键处理机制有哪些相关的应用案例?
    发表于 09-29 06:28

    单片机的中断处理机制

    单片机的中断处理机制什么是中断?为什么要使用中断(中断的特点)什么是中断源?中断源有哪些中断机制的流程中断优先级多个中断同时发生什么是中断?当CPU执行程序时,由于发生了某种随机的事件(内部或外部
    发表于 12-07 11:14

    Cortex-M3的异常处理机制分析

    Cortex-M3的异常处理机制分析  详细阐述CortexM3异常的分类、优先级、进入和退出,以及在CortexM3异常处理机制
    发表于 03-29 15:07 2002次阅读
    Cortex-M3的<b class='flag-5'>异常</b><b class='flag-5'>处理机制</b>分析

    如何处理Linux下C++异常

     在C++中,无论何时在处理程序内捕获一个异常,关于该异常来源的信息都是不为人知的。异常
    发表于 07-15 09:44 1997次阅读

    C++异常机制探讨

    C++异常机制为我们提供了更好的解决方法。异常处理的基本思想是:当出现错误时抛出一个异常,希望
    发表于 11-23 11:04 3468次阅读
    <b class='flag-5'>C++</b><b class='flag-5'>异常</b><b class='flag-5'>机制</b>探讨

    Java中的异常处理机制

    编写异常处理代码的建议 如果你写方法时没办法处理未知意外情况,可以考虑在方法的声明中用throws关键字把检查型异常传播出去,强制要求客户端程序
    发表于 03-26 11:44 6次下载

    Java程序设计教程之异常处理的详细资料说明

    本文档的详细介绍的是Java程序设计教程之异常处理的详细资料说明主要内容包括了:1 什么是异常,2异常
    发表于 02-22 10:27 13次下载
    Java<b class='flag-5'>程序</b>设计教程之<b class='flag-5'>异常</b><b class='flag-5'>处理</b>的详细资料说明

    C++程序设计教程之C++工具的详细资料说明

    本文档的详细介绍的是C++程序设计教程之C++工具的详细资料说明主要内容包括了:1. 异常处理,2. 命名空间,3. 使用早期的函数库
    发表于 03-14 16:39 4次下载
    <b class='flag-5'>C++</b><b class='flag-5'>程序</b>设计教程之<b class='flag-5'>C++</b>工具的详细资料说明

    Java高级编程之异常处理

    对于我们所开发的程序而言,错误是无法避免的。本文阐述了如何运用java的异常处理机制为我们控制和处理异常的出现,从而保证
    发表于 07-08 16:14 19次下载
    Java高级编程之<b class='flag-5'>异常</b><b class='flag-5'>处理</b>

    C++异常机制底层原理与实际应用详细说明

    我们在对 vector 做 push 操作的时候,或者对某个指针做 new 操作的时候,如果没有做异常处理,一旦系统内存不够用了,程序是会被 terminate 掉的。这就要求我们熟悉 C++
    的头像 发表于 11-22 11:34 3182次阅读

    总结:ARM的异常处理机制分析资料下载

    电子发烧友网为你提供总结:ARM的异常处理机制分析资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用户指南、解决方案等资料,希望可以帮助到广大的电子工程师们。
    发表于 04-15 08:45 7次下载
    总结:ARM的<b class='flag-5'>异常</b><b class='flag-5'>处理机制</b>分析资料下载

    基于ARM核的嵌入式系统异常处理机制的设计

    电子发烧友网站提供《基于ARM核的嵌入式系统异常处理机制的设计.pdf》资料免费下载
    发表于 10-27 09:00 0次下载
    基于ARM核的嵌入式系统<b class='flag-5'>异常</b><b class='flag-5'>处理机制</b>的设计

    介绍C语言中错误处理异常处理的一些常用的方法和策略

    C语言是一种低级的、静态的、结构化的编程语言,它没有提供像C++或Java等高级语言中的异常处理机制,例如try-catch-finally等。
    的头像 发表于 02-28 14:25 612次阅读

    TI C64x+ DSP内核异常处理机制的应用

    电子发烧友网站提供《TI C64x+ DSP内核异常处理机制的应用.pdf》资料免费下载
    发表于 08-28 11:54 0次下载
    TI <b class='flag-5'>C</b>64x+ DSP内核<b class='flag-5'>异常</b><b class='flag-5'>处理机制</b>的应用