C++异常处理try throw catch
来源:互联网 发布:centos7 php支持mysql 编辑:程序博客网 时间:2024/04/28 13:49
// tt.cpp : 定义控制台应用程序的入口点。
//
/*
程序中的错误分为编译时的错误和运行时的错误。编译时的错误主要是语法错误,比如:句尾没有加分号,括号不匹配,关键字错误等,这类错误比较容易修改,因为编译系统会指出错误在第几行,什么错误。而运行时的错误则不容易修改,因为其中的错误是不可预料的,或者可以预料但无法避免的,比如内存空间不够,或者在调用函数时,出现数组越界等错误。如果对于这些错误没有采取有效的防范措施,那么往往会得不到正确的运行结果,程序不正常终止或严重的会出现死机现象。我们把程序运行时的错误统称为异常,对异常处理称为异常处理。C++中所提供的异常处理机制结构清晰,在一定程度上可以保证程序的健壮性。
C++中处理异常的过程是这样的:在执行程序发生异常,可以不在本函数中处理,而是抛出一个错误信息,把它传递给上一级的函数来解决,上一级解决不了,再传给其上一级,由其上一级处理。如此逐级上传,直到最高一级还无法处理的话,运行系统会自动调用系统函数terminate,由它调用abort终止程序。这样的异常处理方法使得异常引发和处理机制分离,而不在同一个函数中处理。这使得底层函数只需要解决实际的任务,而不必过多考虑对异常的处理,而把异常处理的任务交给上一层函数去处理。
{
被检查语句
throw 异常
}
catch(异常类型1)
{
进行异常处理的语句1
}
catch(异常类型2)
{
进行异常处理的语句2
}
下面对异常处理补充几点:
(1)try和catch块中必须要用花括号括起来,即使花括号内只有一个语句也不能省略花括号;
(2)try和catch必须成对出现,一个try_catch结果中只能有一个try块,但可以有多个catch块,以便与不同的异常信息匹配;
(3)如果在catch块中没有指定异常信息的类型,而用删节号"...",则表示它可以捕获任何类型的异常信息;
(4)如果throw不包括任何表达式,表示它把当前正在处理的异常信息再次抛出,传给其上一层的catch来处理;
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++中所提供的异常处理机制结构清晰,在一定程度上可以保证程序的健壮性。
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 提供的预定义异常:
下面对异常处理补充几点:
(1)try和catch块中必须要用花括号括起来,即使花括号内只有一个语句也不能省略花括号;
(2)try和catch必须成对出现,一个try_catch结果中只能有一个try块,但可以有多个catch块,以便与不同的异常信息匹配;
(3)如果在catch块中没有指定异常信息的类型,而用删节号"...",则表示它可以捕获任何类型的异常信息;
(4)如果throw不包括任何表达式,表示它把当前正在处理的异常信息再次抛出,传给其上一层的catch来处理;
(5)C++中一旦抛出一个异常,如果程序没有任何的捕获,那么系统将会自动调用一个系统函数terminate,由它调用abort终止程序;
*/
#include "stdafx.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;
}
0 0
- 【c#】异常处理:try catch throw
- try catch throw异常处理
- 异常处理 throw try catch
- 异常处理 try catch throw
- C++处理异常 try,catch,throw
- C++ try catch() throw 异常处理
- C++ try catch() throw 异常处理
- C++ try catch() throw 异常处理
- C++处理异常 try,catch,throw
- C++处理异常 try,catch,throw
- C++语言处理异常 try catch throw
- C++异常处理机制---try&throw&catch
- C++处理异常 try,catch,throw
- C++中异常处理try-throw-catch
- C++异常处理try throw catch
- php异常处理--try,throw,catch
- C++处理异常 try,catch,throw
- C++处理异常 try,catch,throw
- RSA算法
- Wince6.0 下Camera(OV3640) 驱动开发全程记录
- DB2v9.7的LOB关闭的问题
- ios8 关于定位的一些问题
- IOS高级开发~开机启动&无限后台运行&监听进程
- C++异常处理try throw catch
- IAR C语言嵌入汇编问题
- iOS 应用程序内部国际化,不跟随系统语言
- Android之ActivityManager
- 写文件中文乱码问题解决
- php的SimpleXML方法读写XML接口文件实例解析
- 工程代码行数
- cocos2d-x Android的单点触控多点触控可以使用代码来开启吗?
- js脚本系列(1) JS判断输入字符串长度(汉字算两个字符,字母数字算一个)