首页 >后端开发 >C++ >C 在 Windows 上 __try 的目的和实现是什么?

C 在 Windows 上 __try 的目的和实现是什么?

DDD
DDD原创
2024-11-07 15:04:02141浏览

What is the Purpose and Implementation of __try in C   on Windows?

理解 C 中的 __try、try/catch/finally

在 C 中,try/catch/finally 块通常用于异常处理。但是,有一种带有双下划线的替代语法 __try,它是 Windows 特有的。

何时使用 __try

在 Windows 上,异常处理是通过 Structured 实现的异常处理(SEH)。当使用 MSVC 编译器面向 Windows 时,__try 语法可用于捕获 SEH 异常。

SEH 和 C 异常

MSVC 编译器生成将 C 异常映射到的代码SEH 基础设施,使用异常代码 0xe06d7363(“msc”)。这允许在引发 SEH 异常时调用 C 析构函数。

析构函数的编译器优化

MSVC 编译器优化代码以避免生成析构函数代码(如果存在)对象的生命周期内没有 throw 语句。这种优化可以通过使用 /EHa 编译选项来抑制,这是一致地捕获所有 SEH 异常所必需的。

SEH 异常类型

SEH 有许多异常类型,包括操作系统定义的和特定应用程序使用的。托管异常,例如 .NET 异常,使用异常代码 0xe0434f4d ("com")。

__try、__except 和 __finally

要捕获 SEH 异常,__try与 __except 结合使用,它的作用类似于 C catch 块,但具有更多功能。 __finally 允许在异常处理后执行代码。

示例代码

提供的代码演示了如何使用 __try、__except 和 __finally 来捕获两个 SEH 异常(由访问空指针引起)和 C 异常(由抛出整数引起)。

输出显示为这两个异常调用了析构函数,并且 __ except 成功捕获了异常。

以上是C 在 Windows 上 __try 的目的和实现是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn