共用方式為


終止處理程式語法

__try和__finally關鍵詞可用來建構終止處理程式。 下列範例顯示終止處理程序的結構。

__try 
{ 
    // guarded body of code 
 
} 
__finally 
{ 
    // __finally block 
 
}

如需範例,請參閱 使用終止處理程式

和例外狀況處理程序一樣, 不允許使用 __try 區塊和 __finally 區塊,{}而且不允許使用 goto 語句跳入任一區塊。

__try 區塊包含受終止處理程式保護的程式代碼防護主體。 函式可以有任意數目的終止處理程式,而且這些終止處理區塊可以巢狀於相同函式或不同函式中。

每當控制流程離開__try區塊時,就會執行__finally區塊。 不過,如果您在 __try 區塊內呼叫下列任何函式:ExitProcessExitThread中止,則不會執行__finally區塊。

__finally 區塊是在終止處理程式所在的函式內容中執行。 這表示 __finally 區塊可以存取該函式的局部變數。 執行__finally區塊可以透過下列任何方式終止。

  • 在區塊中執行最後一個語句,並接續至下一個指令
  • 使用控件語句 (returnbreakcontinuegoto
  • 使用 longjmp 或跳至例外狀況處理程式

如果__try區塊的執行因叫用框架型例外狀況處理程式的例外狀況處理區塊而終止,則會在執行例外狀況處理區塊之前執行__finally區塊。 同樣地,從 __try 區塊呼叫 longjmp C 執行時間連結庫函式會導致執行 __finally 區塊,再繼續執行 longjmp 作業的目標 如果 __try 區塊執行因控制語句而終止(傳回中斷繼續goto),則會 執行__finally 區塊。

AbnormalTermination 函式可以在__finally區塊內使用,以判斷__try區塊是否循序終止,也就是說,它是否到達右大括號(})。 由於呼叫 longjmp、跳至例外狀況處理程式或傳回中斷繼續goto 語句,因此離開__try區塊會被視為異常終止。 請注意,無法循序終止會導致系統反向搜尋所有堆疊框架,以判斷是否必須呼叫任何終止處理程式。 這可能會導致效能降低,因為執行數百個指令。

若要避免終止處理程式異常終止,執行應該繼續到 區塊的結尾。 您也可以執行 __leave 語句。 __leave語句允許立即終止__try區塊,而不會造成異常終止及其效能處罰。 請檢查您的編譯程序檔,以判斷是否 支援 __leave 語句。

如果__finally區塊的執行因為傳回控件語句而終止,它就相當於入函式中的右大括弧。 因此,封入函式會傳回。