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中文網其他相關文章!