溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Microsoft C++語言擴展中try-except語句有什么用

發(fā)布時間:2021-09-13 10:01:56 來源:億速云 閱讀:118 作者:小新 欄目:編程語言

小編給大家分享一下Microsoft C++語言擴展中try-except語句有什么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

Microsoft 專用

try-except 語句是一項 Microsoft C++ 語言擴展,它使應(yīng)用程序能夠在正常終止執(zhí)行的事件發(fā)生時獲取對程序的控制權(quán)。 此類事件稱為異常,處理異常的機制稱為結(jié)構(gòu)化異常處理。

異常可能基于硬件或軟件。 即使應(yīng)用程序無法從硬件或軟件異常中完全恢復(fù),結(jié)構(gòu)化異常處理也可以顯示錯誤信息并捕獲應(yīng)用程序的內(nèi)部狀態(tài),從而幫助診斷問題。 這對于無法輕松重現(xiàn)的間歇性問題特別有用。

語法

try-except-statement
__try  compound-statement

__except (  expression  )  compound-statement

__try 子句后的復(fù)合語句是受保護節(jié)。 在 __except 子句后的復(fù)合語句是異常處理程序。 如果在控制節(jié)執(zhí)行過程中引發(fā)了異常,處理程序?qū)⒅付ㄒ扇〉囊幌盗写胧?執(zhí)行過程如下所示:


  1. 執(zhí)行受保護節(jié)。



  2. 如果在受保護節(jié)執(zhí)行過程中未發(fā)生異常,則繼續(xù)執(zhí)行 __except 子句之后的語句。


  3. 如果在受保護節(jié)的執(zhí)行過程中或受保護節(jié)調(diào)用的任何例程中發(fā)生異常,則會計算 __except 表達式,返回的值將確定該異常的處理方式。 有三個值:


  4. EXCEPTION_CONTINUE_SEARCH 異常無法識別。 繼續(xù)向上搜索堆棧查找處理程序,首先是所在的 try-except 語句,然后是具有下一個最高優(yōu)先級的處理程序。


  5. EXCEPTION_CONTINUE_EXECUTION 異??勺R別,但被關(guān)閉。 從出現(xiàn)異常的點繼續(xù)執(zhí)行。


    EXCEPTION_EXECUTE_HANDLER 異??勺R別。 通過執(zhí)行 __except 復(fù)合語句來轉(zhuǎn)移對異常處理程序的控制,然后在異常發(fā)生處繼續(xù)執(zhí)行。


由于 __except 表達式將作為 C 表達式來計算,因此它被限制為單個值、條件表達式運算符或逗號運算符。 如果需要更大量的處理,表達式可調(diào)用返回上面列出的三個值之一的例程。

Microsoft C++語言擴展中try-except語句有什么用 說明

結(jié)構(gòu)化異常處理適用于 C 和 C++ 源文件。 但是,這不是專門為 C++ 設(shè)計的。 您可通過使用 C++ 異常處理來確保提高代碼的可移植性。 此外,C++ 異常處理機制靈活得多,因為它可以處理任何類型的異常。

Microsoft C++語言擴展中try-except語句有什么用 說明

對于 C++ 程序,應(yīng)使用 C++ 異常處理,而不是結(jié)構(gòu)化異常處理。 有關(guān)詳細(xì)信息,請參閱《C++ 語言參考》中的異常處理。

應(yīng)用程序中的每個例程可以有自己的異常處理程序。 __except 表達式在 __try 體的范圍內(nèi)執(zhí)行。 這意味著它可以訪問在該處聲明的任何局部變量。

__leave 關(guān)鍵字在 try-except 語句塊中有效。 __leave 的效果是跳轉(zhuǎn)到 try-except 塊的末尾。 執(zhí)行將在異常處理程序結(jié)束后恢復(fù)。 盡管可使用 goto 語句來達到相同的結(jié)果,但 goto 語句會導(dǎo)致堆棧展開。 由于 __leave 語句不涉及堆棧展開,因此更有效。

使用 longjmp 運行時函數(shù)退出 try-except 語句被視為異常終止。 跳轉(zhuǎn)到 __try 語句是非法的,但跳出該語句是合法的。 如果有進程在執(zhí)行 try-except 語句的過程中取消,則不會調(diào)用異常處理程序。

示例

下面是異常處理程序和終止處理程序的示例。 有關(guān)終止處理程序的詳細(xì)信息,請參閱 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");

這是上面的示例的輸出,右側(cè)還添加了注釋:

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語句有什么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI