VC++中 __try,____except( EXCEPTION_EXECUTE_HANDLER ) 结构中,except的参数是什么

本文详细介绍了VC++中__try, __except(EXCEPTION_EXECUTE_HANDLER)结构的使用方法及except参数的意义。解释了三种不同的异常处理行为:忽略异常、继续搜索处理模块以及执行处理模块。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

VC++中 __try,____except( EXCEPTION_EXECUTE_HANDLER ) 结构中,except的参数是什么

在__excep后面的()中是一个表达式,值可以是:
EXCEPTION_CONTINUE_EXECUTION (–1)  异常被忽略,控制流将在异常出现的点之后,继续恢复运行。
EXCEPTION_CONTINUE_SEARCH (0)  异常不被识别,也即当前的这个__except模块不是这个异常错误所对应的正确的异常处理模块。系统将继续到上一层的try-except域中继续查找一个恰当的__except模块。
EXCEPTION_EXECUTE_HANDLER (1)  异常已经被识别,也即当前的这个异常错误,系统已经找到了并能够确认,这个__except模块就是正确的异常处理模块。控制流将进入到__except模块中。

### C/C++中 `__try` 和 `try` 的区别及用法 在C/C++编程语言中,`try` 是一种通用的异常处理机制,主要用于捕获和处理程序运行过程中可能出现的各种异常。然而,`__try` 属于 Windows 平台特有的扩展语法,通常与结构化异常处理(Structured Exception Handling, SEH)一起使用。以下是两者的主要差异及其具体应用场景。 #### 1. **`try-catch` 异常处理** `try-catch` 是标准C++提供的一种异常处理机制,适用于跨平台的应用开发。它的基本工作流程是:当一段代码可能发生错误时,将其放置在 `try` 块中;一旦检测到异常,则跳转至对应的 `catch` 子句进行处理[^3]。 示例代码展示如何利用 `try-catch` 来防止除零运算引发崩溃: ```cpp #include <iostream> using namespace std; double division(double numerator, double denominator) { if(denominator == 0){ throw "Division by zero condition!"; } return (numerator/denominator); } int main () { int x = 50; int y = 0; double z = 0; try{ z = division(x,y); cout << z << endl; } catch(const char* msg ){ cerr << msg << endl; } return 0; } ``` 在此案例里,如果分母为零则抛出字符串形式的异常信息,并通过匹配相应类型的 `catch` 进行捕捉显示给用户[^4]。 #### 2. **`__try-__except` 结构化异常处理** 相比之下,`__try-__except` 更加贴近操作系统级别操作,尤其适合处理那些无法被常规C++异常模型覆盖的情况,例如访问违例、非法指令等硬件级别的问题。这是微软专有的扩展功能,仅限于Windows平台上有效。 下面的例子演示了如何运用SEH来拦截内存读取越界的状况: ```cpp #include <windows.h> #include <stdio.h> void FaultFunction() { volatile int n = 0; __try { *(PCHAR) NULL = 'z'; // Intentional access violation. } __except(EXCEPTION_EXECUTE_HANDLER) { printf("Access Violation Caught\n"); } } int main(){ FaultFunction(); system("pause"); return 0; } ``` 在这个实例当中,尝试向空指针写入字符将会触发访问违规事件,随后进入 `__except` 部分完成自定义恢复措施[^3]。 #### 主要对比总结表 | 特性 | `try-catch` | `__try-__except` | |-------------------|-------------------------------------|--------------------------------------| | **适用范围** | 跨平台 | Windows专属 | | **主要用途** | 对象导向式的逻辑错误管理 | 系统级低层次错误如内存溢出等问题 | | **性能开销** | 较高 | 相对较低 | --- ### 示例代码总结 综上所述,尽管二者都旨在增强程序健壮性和安全性方面发挥作用,但由于设计理念的不同决定了各自擅长应对哪类挑战。因此,在实际项目选型阶段需根据目标受众群体的操作系统环境以及预期解决问题性质做出明智决策。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值