• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Jiang's C++ Space

            創(chuàng)作,也是一種學(xué)習(xí)的過程。

               :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            以前有這么個問題,如果代碼不小心發(fā)生了一個異常,比如除零異常,但我不想讓代碼就此彈框結(jié)束,我想讓代碼忽略掉這個異常繼續(xù)運(yùn)行,那應(yīng)該怎么辦?
            try
            {
                
            int a=1;
                
            int b=0;
                
            int c=a/b;
            }
            catch()
            {
                printf(
            "Ignore that error and continue to work!\n");
            }
            這段代碼并不奏效,因?yàn)槌沐e誤是一個系統(tǒng)異常,而不是一個C++類型異常,所以catch不到的,這種異常類型也就沒法通過這種方式來處理了。必須用Windows特有的異常處理方式:
            __try
            {
                
            int a=1;
                
            int b=0;
                
            int c=a/b;
            }
            __except(EXCEPTION_EXECUTE_HANDLER)
            {
                printf(
            "Ignore that error and continue to work!\n");
            }
            這樣就沒有問題了,而且我們可以在__except中調(diào)用GetExceptionCode來獲得異常代碼,比如這個例子的異常代碼是0xC0000094,表示“整型除零異常”。試圖訪問一個非法地址導(dǎo)致的異常也同樣可以通過這種方式來捕捉到。例如:
            __try
            {
                
            int* p = NULL;
                
            *= 10;
            }
            __except(EXCEPTION_EXECUTE_HANDLER)
            {
                printf(
            "Exception[%0X] occured!\n", GetExceptionCode());
            }
            異常代碼0xC0000005,這個我們見得太多了,也就是非法地址訪問異常。
            這種方式的異常處理還有個妙用,那就是用來取代goto語句。大致這樣:
            __try
            {
                BOOL rtn 
            = Foo1();
                
            if(!rtn)
                    __leave;

                rtn 
            = Foo2();
                
            if(!rtn)
                    __leave;

                
            //Blah Blah Blah
            }
            __finally
            {
                
            //Do some job to release the resources.
            }
            進(jìn)一步信息請查看MSDN,查找“__try”等關(guān)鍵字就可以了。
            值得注意的是,這種方式的異常處理不能和C++風(fēng)格的異常處理同時使用,否則會編譯通不過。
            posted on 2010-08-11 15:30 Jiang Guogang 閱讀(671) 評論(0)  編輯 收藏 引用 所屬分類: Windows Programming
            一本久久a久久精品vr综合| 亚洲精品国产综合久久一线| 久久久无码精品午夜| 久久久久久狠狠丁香| 激情久久久久久久久久| 久久久久久曰本AV免费免费| 国产精品久久久久久吹潮| 久久成人国产精品二三区| 久久久亚洲AV波多野结衣| 99精品国产在热久久| 2021国产精品久久精品| 国产999精品久久久久久| 亚洲av伊人久久综合密臀性色| 99久久www免费人成精品| 久久久久AV综合网成人| 热99RE久久精品这里都是精品免费| 人妻无码久久一区二区三区免费| 国产香蕉久久精品综合网| 欧美精品一区二区精品久久| 久久精品国产亚洲αv忘忧草| 色综合久久88色综合天天| 日韩精品久久久久久免费| 思思久久99热免费精品6| 国产亚洲色婷婷久久99精品91 | 欧美一级久久久久久久大片| 国产亚洲精久久久久久无码| 无码任你躁久久久久久老妇App| 99久久精品国产一区二区蜜芽| 亚洲AV无码成人网站久久精品大| 久久久久久极精品久久久| 久久精品亚洲乱码伦伦中文| 国产精品久久久久久搜索| 久久精品国产亚洲AV电影| 中文无码久久精品| 亚洲午夜久久久影院| 久久久亚洲裙底偷窥综合| 婷婷久久五月天| 亚洲国产精品无码久久98| 亚洲欧美日韩久久精品第一区 | 久久影院综合精品| 亚洲狠狠婷婷综合久久蜜芽|