C 中的 __try 和 try/catch/finally
C 中,异常处理主要通过 try/catch/finally 块实现。但是,还有一些鲜为人知的命令以双下划线开头,例如 __try。本文旨在阐明何时需要使用这些下划线。
在 Windows 系统上,通过结构化异常处理 (SEH)(一种操作系统级机制)支持异常。编译器通常利用此 SEH 基础结构来实现 C 异常。 throw 和 catch 关键字仅处理 C 异常,其对应的 SEH 异常代码为 0xe06d7363。
为了处理 SEH 异常,C 程序需要使用非标准 __try 关键字。此外,__except 与 catch 类似,但允许指定异常过滤器来确定是否应处理活动异常。 __finally 在异常处理后启用代码执行。
为了说明这些概念,请考虑下面的示例程序:
#include <windows.h> #include <iostream> class Example { public: ~Example() { std::cout << "destructed" << std::endl; } }; int filterException(int code, PEXCEPTION_POINTERS ex) { std::cout << "Filtering " << std::hex << code << std::endl; return EXCEPTION_EXECUTE_HANDLER; } void testProcessorFault() { Example e; int* p = 0; *p = 42; } void testCppException() { Example e; throw 42; } int main() { __try { testProcessorFault(); } __except(filterException(GetExceptionCode(), GetExceptionInformation())) { std::cout << "caught" << std::endl; } __try { testCppException(); } __except(filterException(GetExceptionCode(), GetExceptionInformation())) { std::cout << "caught" << std::endl; } return 0; }
以上是在 C 语言中什么时候应该使用 `__try` 和 `__ except` 而不是 `try` 和 `catch` ?的详细内容。更多信息请关注PHP中文网其他相关文章!