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

在前面几篇文章中,我们介绍了VC++结构化异常处理的相关内容,目前其用途仅限于捕获代码中本来就存在的异常,比如访问违规、除数为0等异常情况。其实在很多场合,我们也完全可以利用这种机制,触发一个异常,然后让执行流程转入异常处理阶段。

一个最典型的例子是Windows中用于创建堆和分配堆内存的HeapCreate和HeapAlloc等函数,如果在其传入的dwFlags中加入了HEAP_GENERATE_EXCEPTIONS标记,则当分配或创建失败后,这些函数不再如其他WinAPI一样通过返回值体现,而是会直接抛出异常。这时,调用它们的代码也不必每调用一个API就检查返回值,而是在try块中写正常调用的执行流程,而在except块中写异常处理的代码。这样省略了之前每个WinAPI后面的if判断是否成功的语句,而将其集中到except中,使得程序的正常执行流程变得更加简单。这种由我们自己抛出的异常,称为“软件异常”。

在Win32API中,使用RaiseException函数抛出一个异常。其原型如下:

void WINAPI RaiseException(
__in DWORD dwExceptionCode,
__in DWORD dwExceptionFlags,
__in DWORD nNumberOfArguments,
__in const ULONG_PTR *lpArguments );

其中,</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值