共用方式為


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++)