关于c异常处理

关于c异常处理

ID:32677179

大小:60.77 KB

页数:6页

时间:2019-02-14

关于c异常处理_第1页
关于c异常处理_第2页
关于c异常处理_第3页
关于c异常处理_第4页
关于c异常处理_第5页
资源描述:

《关于c异常处理》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、C++异常处理VCL和CLX异常类C++异常处理异常就是需要特殊处理的异常情况,还包括运行时出现的错误,例如被零除、自由存储耗尽。异常处理提供了标准的错误处理手段,可以发现预期的与非预期的问题,使开发人员能识别、捕捉和定位错误(bug)o当一个错误出现时,程序抛出一个异常。这个异常通常包含了发生异常的相关信息。这允许程序的其他部分去诊断异常的原因。程序通过把可能抛出异常的语句放到一个try块中來为异常处理作准备。假如这些语句之一抛出了一个异常,控制就被传送到一个处理这类异常的一个异常句柄。异常句柄被认为是捕捉异常和在终止程序Z前确

2、定所采取的活动。理解C++异常处理包括:异常处理语法重新抛出异常异常规范(Exceptionspecifications)解开异常(Unwindingexceptions)异常处理中的构造程序处理未被捕捉到和预料之外的界常1.异常处理语法异常处理要求使用三个关键字:Uy、throw和catch=throw关键字用于生成异常。Try块包含了可能抛出异常的语句,其后跟随一个或多个catch语句。每个catch语句处理一个特定类型的异常。注意:try、catch和throw关键字在C程序中是不允许的。1.1try块包含一个语句或多个语句

3、,块中语句可以抛出一个异常。程序通过执行一个throw语句抛出一个异常。Throw语句通常出现在一个函数屮。例如:voidSetFieldValue(DF*dataField,intuserValue){if((userValue<0)

4、

5、userValue>10)throwEIntegerRange(O,10,userValue);程序的另外部分可以捕捉抛出的并常对象并依此处理它。SetFieldValue(dataField,userValue);catch(ElntegerRange&rangeErr){printf(nEx

6、pectedvaluebetween%dand%d,butgot%dH,rangeErr.min,rangeErr.max,rangeErr.value);在前面的例子中,假如函数SetFieldValue发现它的输入参数无效是无效的,它可以抛出一个异常来简要说明这个异常。Try/catch块包装了SetFieldValue函数以便捕捉SetFieldValue函数抛出的异常,并且执行printf语句。假如没有异常抛出,printf将不会执行。由try表示的try块必须立即跟随由catch表示的句柄。Try块是一个语句,它规定

7、了作为程序执行的控制流。假如在Uy块中抛出一个异常,程序控制被传送到合适的异常句柄。1.2catch语句有儿种格式。对象可以通过值、引用或指针捕捉。另外const修饰符可以被应用于catch参数。一个try块可以有多个catch语句,以便允许一个块来捕捉多个不同种类的异常,而且应该是一个catch语句处理各自的可能被抛出异常。例如:tryCommitChange(dataBase,recordMods);catch(constElntegerRange&rangeErr)printf("Gotanintegerrangeexcep

8、tion");catch(constEFileError&fileErr)printf(uGotafileI/Oerror'1);假如函数CommitChange使用了多个子系统,且这些子系统可以抛出不同类型的异常,你可能要分别处理每一类异常。対于单个的try语句,借助多个catch语句,你可以使每一类异常具有相应的句柄。假如异常对象是由某些基类派生的,你可能要对某些派生的异常增加专门的句柄,而且包括对于基类的一般句柄。你可以这样解决该问题,通过以异常被抛出的顺序放置catch语句,实现异常处理。例如,下面代码首先处理Elnteg

9、erRange,然丿匸处理ERange,ElntegerRange是由ERange派生的。trySetFieldValue(dataField,userValue);catch(constElntegerRange&rangeErr)printf("Gotanintegerrangeexception");catch(constERange&rangeErr)printf(°Gotarangeexception");最后,假如你要你的句柄捕捉所有try块之后抛出的异常,使用专用格式catch(...)o这样就告诉异常处理系统对于所

10、有异常调用该句柄。例如:SetFieldValue(dataField,userValue);catch(...)printf(nGotanexceptionofsomekind'*);2.重新抛出异常throw语句可以抛出各种类型的对象。在C++

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。