共用方式為


混合 (結構化) 的 c 和 C++ 例外狀況

如果您想要撰寫可移植性的程式碼,不建議使用結構化的例外處理 C++ 程式。 不過,有時候要編譯的**/EHa**和混合結構化的例外狀況和 C++ 原始程式碼,以及需要一些功能來處理這兩種例外狀況。 由於結構化的例外處理常式的物件或具型別的例外狀況沒有概念,但卻無法處理例外狀況擲回的 C++ 程式碼路徑。 不過,C++ 攔截的處理常式可以處理結構化的例外狀況。 例如,C++ 例外處理的語法為 (, throw, 攔截) 不會獲接受由 c 編譯器,而結構化的例外處理的語法 (__try, __except, __finally) 支援 C++ 編譯器。

請參閱_set_se_translator處理結構化的例外狀況為 C++ 例外狀況的資訊。

如果您混用的結構,而 C++ 例外狀況,請注意下列:

  1. 無法在相同的函式中混合 C++ 例外狀況和結構化的例外狀況。

  2. 終止處理常式 (__finally區塊) 就會永遠執行,即使在復原後發生例外狀況。

  3. C + + 例外處理可以攔截,並保留還原所有以編譯的模組中的語意 /EH 編譯器選項 (這個選項啟用還原語意)。

  4. 可能有某些情況下,哪一個解構函式中不呼叫函式的所有物件。 比方說,如果在嚐試撥透過未初始化的函式指標呼叫的函式的結構化的例外狀況時發生,且該函式做為測試小組建構了呼叫之前的參數物件,這些物件不會在堆疊回溯期間呼叫其解構函式。

您還想知道關於哪些方面的詳細資訊?

請參閱

參考

C + + 例外處理