您好,登錄后才能下訂單哦!
小編給大家分享一下Microsoft C++語言擴展中try-except語句有什么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
Microsoft 專用
try-except 語句是一項 Microsoft C++ 語言擴展,它使應用程序能夠在正常終止執行的事件發生時獲取對程序的控制權。 此類事件稱為異常,處理異常的機制稱為結構化異常處理。
異常可能基于硬件或軟件。 即使應用程序無法從硬件或軟件異常中完全恢復,結構化異常處理也可以顯示錯誤信息并捕獲應用程序的內部狀態,從而幫助診斷問題。 這對于無法輕松重現的間歇性問題特別有用。
try-except-statement:
__try compound-statement
__except ( expression ) compound-statement
__try
子句后的復合語句是受保護節。 在 __except
子句后的復合語句是異常處理程序。 如果在控制節執行過程中引發了異常,處理程序將指定要采取的一系列措施。 執行過程如下所示:
執行受保護節。
如果在受保護節執行過程中未發生異常,則繼續執行 __except
子句之后的語句。
如果在受保護節的執行過程中或受保護節調用的任何例程中發生異常,則會計算 __except
表達式,返回的值將確定該異常的處理方式。 有三個值:
EXCEPTION_CONTINUE_SEARCH
異常無法識別。 繼續向上搜索堆棧查找處理程序,首先是所在的 try-except 語句,然后是具有下一個最高優先級的處理程序。
EXCEPTION_CONTINUE_EXECUTION
異常可識別,但被關閉。 從出現異常的點繼續執行。
EXCEPTION_EXECUTE_HANDLER
異常可識別。 通過執行 __except
復合語句來轉移對異常處理程序的控制,然后在異常發生處繼續執行。
由于 __except
表達式將作為 C 表達式來計算,因此它被限制為單個值、條件表達式運算符或逗號運算符。 如果需要更大量的處理,表達式可調用返回上面列出的三個值之一的例程。
說明 |
---|
結構化異常處理適用于 C 和 C++ 源文件。 但是,這不是專門為 C++ 設計的。 您可通過使用 C++ 異常處理來確保提高代碼的可移植性。 此外,C++ 異常處理機制靈活得多,因為它可以處理任何類型的異常。 |
說明 |
---|
對于 C++ 程序,應使用 C++ 異常處理,而不是結構化異常處理。 有關詳細信息,請參閱《C++ 語言參考》中的異常處理。 |
應用程序中的每個例程可以有自己的異常處理程序。 __except
表達式在 __try
體的范圍內執行。 這意味著它可以訪問在該處聲明的任何局部變量。
__leave
關鍵字在 try-except 語句塊中有效。 __leave
的效果是跳轉到 try-except 塊的末尾。 執行將在異常處理程序結束后恢復。 盡管可使用 goto
語句來達到相同的結果,但 goto
語句會導致堆棧展開。 由于 __leave
語句不涉及堆棧展開,因此更有效。
使用 longjmp
運行時函數退出 try-except 語句被視為異常終止。 跳轉到 __try
語句是非法的,但跳出該語句是合法的。 如果有進程在執行 try-except 語句的過程中取消,則不會調用異常處理程序。
示例
下面是異常處理程序和終止處理程序的示例。 有關終止處理程序的詳細信息,請參閱 try-finally 語句。
. . . puts("hello"); __try{ puts("in try"); __try{ puts("in try"); RAISE_AN_EXCEPTION(); }__finally{ puts("in finally"); } }__except( puts("in filter"), EXCEPTION_EXECUTE_HANDLER ){ puts("in except"); } puts("world");
這是上面的示例的輸出,右側還添加了注釋:
hello in try /* fall into try */ in try /* fall into nested try */ in filter /* execute filter; returns 1 so accept */ in finally /* unwind nested finally */ in except /* transfer control to selected handler */ world /* flow out of handler */
以上是“Microsoft C++語言擴展中try-except語句有什么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。