• <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)系 :: 聚合  :: 管理 ::
            以前有這么個(gè)問題,如果代碼不小心發(fā)生了一個(gè)異常,比如除零異常,但我不想讓代碼就此彈框結(jié)束,我想讓代碼忽略掉這個(gè)異常繼續(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(cuò)誤是一個(gè)系統(tǒng)異常,而不是一個(gè)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來獲得異常代碼,比如這個(gè)例子的異常代碼是0xC0000094,表示“整型除零異常”。試圖訪問一個(gè)非法地址導(dǎo)致的異常也同樣可以通過這種方式來捕捉到。例如:
            __try
            {
                
            int* p = NULL;
                
            *= 10;
            }
            __except(EXCEPTION_EXECUTE_HANDLER)
            {
                printf(
            "Exception[%0X] occured!\n", GetExceptionCode());
            }
            異常代碼0xC0000005,這個(gè)我們見得太多了,也就是非法地址訪問異常。
            這種方式的異常處理還有個(gè)妙用,那就是用來取代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)格的異常處理同時(shí)使用,否則會(huì)編譯通不過。
            posted on 2010-08-11 15:30 Jiang Guogang 閱讀(680) 評論(0)  編輯 收藏 引用 所屬分類: Windows Programming
            久久成人国产精品二三区| 久久国产视屏| 久久人人爽人人爽人人AV东京热| 日韩久久久久中文字幕人妻| 久久婷婷午色综合夜啪| 亚洲AV成人无码久久精品老人| 色成年激情久久综合| 尹人香蕉久久99天天拍| 91精品国产高清91久久久久久| 久久国产成人午夜aⅴ影院 | 亚洲国产精品一区二区三区久久| 精品久久久久久国产| 国产成人AV综合久久| 中文字幕久久精品无码| 99热精品久久只有精品| 少妇人妻88久久中文字幕| 日韩va亚洲va欧美va久久| 久久综合欧美成人| 日本欧美久久久久免费播放网| 久久精品国产黑森林| 久久精品国产亚洲综合色| 国产69精品久久久久APP下载| 国产一级做a爰片久久毛片| 中文无码久久精品| 国产99久久久国产精品小说| 国产毛片久久久久久国产毛片| 久久无码人妻一区二区三区午夜| 手机看片久久高清国产日韩| 青青热久久综合网伊人| 久久精品国产亚洲欧美| 91精品国产综合久久久久久| 伊人久久精品无码av一区| 国产精品久久久久免费a∨| 久久香蕉综合色一综合色88| 国内精品久久久久久久97牛牛| 日日躁夜夜躁狠狠久久AV| 色偷偷88888欧美精品久久久| 久久久久免费精品国产| 久久精品亚洲AV久久久无码| 久久婷婷国产剧情内射白浆| 99久久精品免费看国产一区二区三区|