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