try-finally 陳述式 (C)

Microsoft 特定

try-finally 陳述式是 C 語言的 Microsoft 擴充功能,可讓應用程式在執行程式碼的區塊遭到中斷時,保證會執行清除程式碼。 清除包含如取消配置記憶體、關閉檔案和釋放檔案控制代碼等工作。 try-finally 陳述式對於有多個地方要檢查可能會導致常式過早傳回的錯誤時會特別有用。

try-finally-statement:
__try compound-statement __finally compound-statement

__try 子句後面的複合陳述式是保護的區段。 __finally 子句後面的複合陳述式則是終止處理常式。 處理常式會指定一組動作,這些動作會在結束受防護區段時執行。 不論受防護區段是透過例外狀況結束, (異常終止) 或標準會通過 (一般終止) 。

此時控制權會經由簡單的循序執行 (正常執行) 到達 __try 陳述式。 當控制權進入 __try 陳述式時,與它關聯的處理常式會變成作用中。 執行程序如下所示:

  1. 執行保護的區段。

  2. 已叫用終止處理常式。

  3. 當終止處理常式完成時,便會從 __finally 陳述式之後繼續執行。 例如,無論受防護的區段如何結束 (,透過 goto 語句離開受防護主體或透過 return 語句) ,終止處理常式會在控制流程移出受防護區段之前執行。

__leave 關鍵字在 try-finally 陳述式區塊內是有效的。 __leave 的作用是會跳到 try-finally 區塊的結尾。 接著便會立即執行終止處理常式。 雖然 goto 陳述式可用來達到相同的結果,但 goto 陳述式會造成堆疊回溯的情形。 __leave語句更有效率,因為它不包含堆疊回溯。

使用 try-finally 陳述式或 return 執行階段函式結束 longjmp 陳述式會視為是異常終止。 跳到 __try 語句不是合法的,而是要跳出其中一個語句。 起點和目的地之間的所有作用中 __finally 陳述式都必須執行。 它稱為本機 回溯

如果在執行 try-finally 語句時終止進程,則不會呼叫終止處理常式。

注意

結構化例外狀況處理可搭配 C 和 C++ 原始程式檔使用。 不過,它並非專為 C++ 所設計。 對於可攜式 C++ 程式,應該使用 C++ 例外狀況處理,而不是結構化例外狀況處理。 此外,C++ 例外狀況處理機制更有彈性,因為它可以處理任何類型的例外狀況。 如需詳細資訊,請參閱C++ 語言參考中的例外狀況處理

請參閱 語句的try-except範例,以查看 語句的運作方式 try-finally

END Microsoft 特定

另請參閱

try-finally 語句 (C++)