try-finally 陳述式 (C)
Microsoft 特定
try-finally
陳述式是 C 語言的 Microsoft 擴充功能,可讓應用程式在執行程式碼的區塊遭到中斷時,保證會執行清除程式碼。 清除包含如取消配置記憶體、關閉檔案和釋放檔案控制代碼等工作。 try-finally
陳述式對於有多個地方要檢查可能會導致常式過早傳回的錯誤時會特別有用。
try-finally-statement
:
__try
compound-statement
__finally
compound-statement
__try
子句後面的複合陳述式是保護的區段。 __finally
子句後面的複合陳述式則是終止處理常式。 處理常式會指定一組動作,這些動作會在結束受防護區段時執行。 不論受防護區段是透過例外狀況結束, (異常終止) 或標準會通過 (一般終止) 。
此時控制權會經由簡單的循序執行 (正常執行) 到達 __try
陳述式。 當控制權進入 __try
陳述式時,與它關聯的處理常式會變成作用中。 執行程序如下所示:
執行保護的區段。
已叫用終止處理常式。
當終止處理常式完成時,便會從
__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 特定
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應