Visual C++异常处理机制原理与应用(四)——C/C++结构化异常处理之try-except异常处理的使用(中)

在上一篇博文《Visual C++异常处理机制原理与应用(三)——C/C++结构化异常处理之try-except异常处理的使用(上)》中,我们已经对VC中C/C++结构化异常处理的异常处理机制的特点进行了分析。这篇文章主要通过一个实例讲解C/C++结构化异常处理中可能最令人困惑之处——即多级异常处理与终止处理嵌套时程序的执行流程。在开始分析之前,先温习一下两者的特性:

  1. 被终止处理程序保护的代码块,将会在执行流程试图越出代码块之前执行局部展开,转入终止处理程序进行执行。如果终止处理程序中没有越出保护块的代码,则执行完终止处理程序后,执行流程返回保护块中,执行引发局部展开的那条代码。
  2. 被异常处理程序保护的代码块,如果其中某条指令执行时引发异常,则执行流为从内而外地调用各级except块中的过滤函数或过滤表达式,直到找到一个能处理本异常的try块,然后执行其异常处理代码。

但仔细想想就会发现问题:如果try-except块中嵌套了一个try-finally块,而被后者保护的代码出现了刚好能被前者处理的异常,那么在执行前者的异常处理代码时,其实执行流程已经越出了try-finally块,那这种情况下是不是也应该先执行finally部分的终止处理代码呢?答案是肯定的。C/C++的结构化异常处理机制将这种行为称为全局展开

当然,全局展开是可以被中途打断的,在任意一个finally中如果包含return语句,则该语句执行后返回上级函数中,而原本将在finally后执行的异常处理程序将不会

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值