C++异常处理try throw catch
// tt.cpp : 定义控制台应用程序的入口点。
//
/*
程序中的错误分为编译时的错误和运行时的错误。编译时的错误主要是语法错误,比如:句尾没有加分号,括号不匹配,关键字错误等,这类错误比较容易修改,因为编译系统会指出错误在第几行,什么错误。而运行时的错误则不容易修改,因为其中的错误是不可预料的,或者可以预料但无法避免的,比如内存空间不够,或者在调用函数时,出现数组越界等错误。如果对于这些错误没有采取有效的防范措施,那么往往会得不到正确的运行结果,程序不正常终止或严重的会出现死机现象。我们把程序运行时的错误统称为异常,对异常处理称为异常处理。C++中所提供的异常处理机制结构清晰,在一定程度上可以保证程序的健壮性。
C++中处理异常的过程是这样的:在执行程序发生异常,可以不在本函数中处理,而是抛出一个错误信息,把它传递给上一级的函数来解决,上一级解决不了,再传给其上一级,由其上一级处理。如此逐级上传,直到最高一级还无法处理的话,运行系统会自动调用系统函数terminate,由它调用abort终止程序。这样的异常处理方法使得异常引发和处理机制分离,而不在同一个函数中处理。这使得底层函数只需要解决实际的任务,而不必过多考虑对异常的处理,而把异常处理的任务交给上一层函数去处理。
C++的异常处理机制有3部分组成:try(检查),throw(抛出),catch(捕获)。把需要检查的语句放在try模块中,检查语句发生错误,throw抛出异常,发出错误信息,由catch来捕获异常信息,并加以处理。一般throw抛出的异常要和catch所捕获的异常类型所匹配。MFC定义了TRY、CATCH(及AND_CATCH、END_CATCH)和THROW(及THROW_LAST)等用于异常处理的宏,其本质上也是标准C++的try、catch和throw的进一步强化。MFC建议不再使用TRY、CATCH和THROW宏,而是直接使用标准C++的方式。
异常处理的一般格式为:
try
{
被检查语句
throw 异常
}
catch(异常类型1)
{
进行异常处理的语句1
}
catch(异常类型2)
{
进行异常处理的语句2
}
...
MFC较好地将异常封装到CException类及其派生类中,自成体系,下表给出了MFC 提供的预定义异常:
异常类 | 含义 |
CMemoryException | 内存不足 |
CFileException | 文件异常 |
CArchiveException | 存档/序列化异常 |
CNotSupportedException | 响应对不支持服务的请求 |
CResourceException | Windows 资源分配异常 |
CDaoException | 数据库异常(DAO 类) |
CDBException | 数据库异常(ODBC 类) |
COleException | OLE 异常 |
COleDispatchException | 调度(自动化)异常 |
CUserException | 用消息框警告用户然后引发一般 CException 的异常 |
下面对异常处理补充几点:
(1)try和catch块中必须要用花括号括起来,即使花括号内只有一个语句也不能省略花括号;
(2)try和catch必须成对出现,一个try_catch结果中只能有一个try块,但可以有多个catch块,以便与不同的异常信息匹配;
(3)如果在catch块中没有指定异常信息的类型,而用删节号"...",则表示它可以捕获任何类型的异常信息;
(4)如果throw不包括任何表达式,表示它把当前正在处理的异常信息再次抛出,传给其上一层的catch来处理;
(5)C++中一旦抛出一个异常,如果程序没有任何的捕获,那么系统将会自动调用一个系统函数terminate,由它调用abort终止程序;
*/
#include "stdafx.h"
#include <stdio.h>
int _tmain(int argc, _TCHAR* argv[])
{
int Erro=100;
char szErro[100]="我是异常";
try
{
//只呢个捕获一次
//throw(Erro);
throw(szErro);
}
catch(int i)
{
printf("出现异常:Erro==%d\n",i);
}
catch(char * pErro)
{
printf("%s\n",pErro);
}
catch(...)
{
printf("捕获任何类型的异常\n");
}
return 0;
}
C++异常处理try throw catch相关推荐
- C++异常处理:try,catch,throw,finally的用法
C++异常处理:try,catch,throw,finally的用法 参考文章: (1)C++异常处理:try,catch,throw,finally的用法 (2)https://www.cnblog ...
- 22 C#中的异常处理入门 try catch throw
22 C#中的异常处理入门 try catch throw 参考文章: (1)22 C#中的异常处理入门 try catch throw (2)https://www.cnblogs.com/thin ...
- java异常处理之throw, throws,try和catch
转自 http://blog.csdn.net/zhouyong80/article/details/1907799 程序运行过程中可能会出现异常情况,比如被0除.对负数计算平方根等,还有可能会出现 ...
- C++异常处理(try catch throw)完全攻略
C语言中文网推出辅导班啦,包括「C语言辅导班.C++辅导班.算法/数据结构辅导班」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践 + 永久学习.QQ在线,随时响应! 程序 ...
- Android异常处理——try、catch、finally、throw、throws
/* * try catch 是捕捉try部分的异常,当你没有try catch的时候,如果出现异常则程序报错; * 加上try catch,出现异常程 ...
- java throw 和catch_java异常处理之throw, throws,try和catch
转自 http://blog.csdn.net/zhouyong80/article/details/1907799 程序运行过程中可能会出现异常情况,比如被0除.对负数计算平方根等,还有可能会出现致 ...
- java异常处理的throw和throws的区别
1. 区别 throws是用来声明一个方法可能抛出的所有异常信息,throws是将异常声明但是不处理,而是将异常往上传,谁调用我就交给谁处理.而throw则是指抛出的一个具体的异常类型. 2.分别介绍 ...
- 六. 异常处理7.throw:异常的抛出
到目前为止,你只是获取了被Java运行时系统抛出的异常.然而,程序可以用throw语句抛出明确的异常.Throw语句的通常形式如下: throw ThrowableInstance; 这里,T ...
- Java异常处理throws/throw
Java的异常被分为两大类:Checked异常和Runtime异常(运行时异常). • Runtime异常:所有的RuntimeException类及其子类的实例: • Checked异常:不是Run ...
最新文章
- [并发编程] - Executor框架#ThreadPoolExecutor源码解读03
- 牛客 - 排序(模拟)
- jenkins 用户授权
- 漫画:什么是希尔排序?
- 按顺序读取选中的复选框
- 代码写的又好又快的秘诀
- teamcity mysql 配置_TeamCity
- 【2020-09-22】某药品信息APP抓包
- creo外观库_Proe/Creo外观着色与贴图
- 8年Python程序员,去2线城市大厂面试崩了……网友:太真实!
- 如何修改域名DNS服务器?修改DNS服务器常见问题汇总
- 计算机上面的用户帐户怎么删除,怎么删除用户帐户的教程详解【图解】
- 索引的作用?和它的优点缺点是什么?
- 迅雷9边下边播绑定第三方播放器
- 解二元微分通解和特解的关系,量子力学中的奇异点分析与高数中通解与特解的关系
- 无创脑刺激对不同神经和神经精神疾病睡眠障碍的影响
- Python 串级PID代码
- matlab 小波的分解与重构
- ETL学习-前期准备
- gridmanager使用于本地数据,使用function来模拟返回后端数据。