LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 251|回复: 0

混合使用 C(结构化)和 C++ 异常

[复制链接]
发表于 2024-2-6 22:43:06 | 显示全部楼层 |阅读模式
若要编写可移植代码,建议不要在 C++ 程序中使用结构化异常处理 (SEH)。 但是,你有时可能希望使用 /EHa 进行编译并将结构化异常和 C++ 源代码组合在一起,并且需要用于处理这两种异常的某个设备。 由于结构化异常处理程序没有对象或类型化异常的概念,因此它无法处理 C++ 代码引发的异常。 但是,C++ catch 处理程序可以处理结构化异常。 C 编译器不接受 C++ 异常处理语法(try、throw、catch),但 C++ 编译器支持结构化异常处理语法(__try、__except、__finally)。

若要了解如何将结构化异常作为 C++ 异常处理,请参阅 _set_se_translator。

如果混合使用结构化异常和 C++ 异常,请注意以下潜在问题:

不能在同一函数中混合 C++ 异常和结构化异常。

始终执行终止处理程序(__finally 块),甚至在引发异常后的展开过程中也是如此。

C++ 异常处理可以捕获并保留使用 /EH 编译器选项(此选项启用展开语义)编译的所有模块中的展开语义。

可以存在一些不为所有对象调用析构函数的情况。 例如,尝试通过未初始化的函数指针调用函数时,可能会出现结构化异常。 如果函数参数是在调用之前构造的对象,则在堆栈展开期间不会调用这些对象的析构函数。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表