小編給大家分享一下Microsoft C++語言擴(kuò)展中try-except語句有什么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、網(wǎng)站制作、西安網(wǎng)絡(luò)推廣、小程序定制開發(fā)、西安網(wǎng)絡(luò)營銷、西安企業(yè)策劃、西安品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供西安建站搭建服務(wù),24小時(shí)服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com
Microsoft 專用
try-except語句是一項(xiàng) Microsoft C++ 語言擴(kuò)展,它使應(yīng)用程序能夠在正常終止執(zhí)行的事件發(fā)生時(shí)獲取對程序的控制權(quán)。 此類事件稱為異常,處理異常的機(jī)制稱為結(jié)構(gòu)化異常處理。
異??赡芑谟布蜍浖?。 即使應(yīng)用程序無法從硬件或軟件異常中完全恢復(fù),結(jié)構(gòu)化異常處理也可以顯示錯(cuò)誤信息并捕獲應(yīng)用程序的內(nèi)部狀態(tài),從而幫助診斷問題。 這對于無法輕松重現(xiàn)的間歇性問題特別有用。
try-except-statement:
__try compound-statement
__except ( expression ) compound-statement
__try
子句后的復(fù)合語句是受保護(hù)節(jié)。 在 __except
子句后的復(fù)合語句是異常處理程序。 如果在控制節(jié)執(zhí)行過程中引發(fā)了異常,處理程序?qū)⒅付ㄒ扇〉囊幌盗写胧?執(zhí)行過程如下所示:
執(zhí)行受保護(hù)節(jié)。
如果在受保護(hù)節(jié)執(zhí)行過程中未發(fā)生異常,則繼續(xù)執(zhí)行 __except
子句之后的語句。
如果在受保護(hù)節(jié)的執(zhí)行過程中或受保護(hù)節(jié)調(diào)用的任何例程中發(fā)生異常,則會(huì)計(jì)算 __except
表達(dá)式,返回的值將確定該異常的處理方式。 有三個(gè)值:
EXCEPTION_CONTINUE_SEARCH
異常無法識(shí)別。 繼續(xù)向上搜索堆棧查找處理程序,首先是所在的 try-except語句,然后是具有下一個(gè)最高優(yōu)先級(jí)的處理程序。
EXCEPTION_CONTINUE_EXECUTION
異常可識(shí)別,但被關(guān)閉。 從出現(xiàn)異常的點(diǎn)繼續(xù)執(zhí)行。
EXCEPTION_EXECUTE_HANDLER
異??勺R(shí)別。 通過執(zhí)行 __except
復(fù)合語句來轉(zhuǎn)移對異常處理程序的控制,然后在異常發(fā)生處繼續(xù)執(zhí)行。
由于 __except
表達(dá)式將作為 C 表達(dá)式來計(jì)算,因此它被限制為單個(gè)值、條件表達(dá)式運(yùn)算符或逗號(hào)運(yùn)算符。 如果需要更大量的處理,表達(dá)式可調(diào)用返回上面列出的三個(gè)值之一的例程。
說明 |
---|
結(jié)構(gòu)化異常處理適用于 C 和 C++ 源文件。 但是,這不是專門為 C++ 設(shè)計(jì)的。 您可通過使用 C++ 異常處理來確保提高代碼的可移植性。 此外,C++ 異常處理機(jī)制靈活得多,因?yàn)樗梢蕴幚砣魏晤愋偷漠惓!?/p> |
說明 |
---|
對于 C++ 程序,應(yīng)使用 C++ 異常處理,而不是結(jié)構(gòu)化異常處理。 有關(guān)詳細(xì)信息,請參閱《C++ 語言參考》中的異常處理。 |
應(yīng)用程序中的每個(gè)例程可以有自己的異常處理程序。 __except
表達(dá)式在 __try
體的范圍內(nèi)執(zhí)行。 這意味著它可以訪問在該處聲明的任何局部變量。
__leave
關(guān)鍵字在 try-except語句塊中有效。 __leave
的效果是跳轉(zhuǎn)到 try-except塊的末尾。 執(zhí)行將在異常處理程序結(jié)束后恢復(fù)。 盡管可使用 goto
語句來達(dá)到相同的結(jié)果,但 goto
語句會(huì)導(dǎo)致堆棧展開。 由于 __leave
語句不涉及堆棧展開,因此更有效。
使用 longjmp
運(yùn)行時(shí)函數(shù)退出 try-except語句被視為異常終止。 跳轉(zhuǎn)到 __try
語句是非法的,但跳出該語句是合法的。 如果有進(jìn)程在執(zhí)行 try-except語句的過程中取消,則不會(huì)調(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++語言擴(kuò)展中try-except語句有什么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!