如果您想要撰寫可攜式程序代碼,不建議在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編譯程式選項編譯的所有模組中攔截並保留回溯語意,以啟用回溯語意。在某些情況下,並非所有物件都呼叫解構函式。 例如,嘗試透過未初始化的函式指標進行函式呼叫時,可能會發生結構化例外狀況。 如果函式參數是在呼叫之前建構的物件,則這些物件的解構函式不會在堆疊回溯期間呼叫。
下一步
-
如需使用
setjmp和longjmp的詳細資訊,請參閱 C++ 程式中。 -
請參閱您可以使用C++來處理結構化例外狀況的範例。