青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

斷言的使用

Posted on 2010-01-17 19:36 rikisand 閱讀(615) 評論(0)  編輯 收藏 引用 所屬分類: 工作記錄~~everydayC/C++Windows ~

解決項目的問題,意識到斷言的重要性。如果一個程序在某處遇到了非法的值,那么最好的情況便是在此刻停下報錯,最壞的情況便是程序不吭不響的執行著~~直到你發現他執行的方式極為詭異,此時,你要花九牛二虎之力才能找到錯誤所在之處~~~~

學習一下斷言吧:

·······什么是斷言

在某處判斷某一個表達式的值為真或者假,如果假則輸出錯誤消息并停止程序的執行~

assert是宏,而不是函數,只在debug版本中有效,因此無需在release版本刪除。

·······哪幾種斷言

MFC

ASSERT

void foo(char* p,int size)
{
ASSERT(p != 0); // 驗證緩沖區指針
ASSERT((size >= 100); // 確認緩沖區大小至少為100字節
// foo 函數的其它計算過程
}
如果沒有定義_DEBUG預處理符,則該語句不會真正生成代碼。Visual C++會在調試模式編譯時自動定義_DEBUG,而在發行模式下,該預處理符是不存在的。如果定義了_DEBUG,則上述兩個斷言生成的代碼類如:
//ASSERT(p != 0);
do
{
if(!(p != 0) && AfxAssertFailedLine(__FILE__, __LINE__))
AfxDebugBreak();
} while(0);
//ASSERT((size >= 100);
do
{
if(!(size >= 100) && AfxAssertFailedLine(__FILE__,__LINE__))
AfxDebugBreak();
}while(0);

ASSERT_KINDOF(classname,pObject); ASSERT_KINDOF(CDocument,pDocument);

檢驗pObject指向的對象是classname類的一個對象或者其派生類的對象

ASSERT_VALID(pObject); pObject 必須是一個派生于CObject類的類對象,會調用其重寫的AssertValid函數 ,例如

如果使用應用向導或類向導生成基于MFC的類,通常會得到AssertValid()的骨架,最好改寫這些骨架代碼以增加最基本的完整性檢查。下面是一個典型的例子,類Sample從CObject繼承,假定它含有職員名字及其薪水:
class Sample : public CObject
{
    protected:
    CString m_Name; // 職員名字
    double m_Salary; // 薪水
public:
    Sample(LPCTSTR name,double salary) : m_Name(name), m_Salary(salary) {}
   #ifdef _DEBUG
        virtual void AssertValid() const;
    #endif

};
#ifdef _DEBUG
void Sample::AssertValid() const
{
    CObject::AssertValid(); // 驗證基類
    ASSERT(!m_Name.IsEmpty()); // 驗證職員名字
    ASSERT(m_Salary > 0); // 驗證薪水
}
#endif

CRT assertion

_ASSERT 和  _ASSERTE 后一個會在出錯時同時打印出條件判斷句

ANSI

assert()

注意:assert用于檢測非法的輸入,但是合法的輸入并不一定是正確的,例如:

int pB = (int*)malloc(sizeof(int)*1000);

assert(pB!=NULL) //錯誤的使用assert 他會在release版本失效~也就是說assert不應該對程序產生副作用

正確的做法:

int pB = (int*) malloc(sizeof(int)*1000);

if(pB == NULL)

{
   //錯誤處理

}

else{

}

另一個例子:

void draw(){

   CFigure* pF = getCF();

   assert(pf!=NULL);

   if(pf == NULL){}

   else{

   }

}

此處,對于getCF來說返回值為NULL是非法的,如果他的返回值可能為null就沒必要加上assert語句。

而下面的if語句則是為了防止release版本出現null指針的情況。

 

 

VERIFY()

由于ASSERT僅在程序的調試版起作用,測試表達式總是被動的。也就是說,它們不能包含賦值、增量、減量等真正改變數據的操作。但有時候我們需要驗證一個主動表達式,比如賦值語句。這時可以使用VERIFY代替ASSERT。下面是一個例子:
void foo(char* p,int size)
{
char* q; // 指針的副本
VERIFY(q = p); // 拷貝指針并執行驗證
ASSERT((size >= 100); // 確保緩沖區大小至少為100字節
// 執行 foo 的其它操作
}
在調試模式下ASSERT和VERIFY是相同的。但在release模式下,VERIFY能夠繼續對表達式求值(但不再進行斷言檢驗),而ASSERT語句在效果上就如同已經刪除了一樣。
盡管在MFC源代碼中可以找到一些應用VERIFY的例子,但ASSERT用得更為普遍。一些程序員總是完全避免使用VERIFY,因為他們已經習慣于使用被動斷言。請記住,如果在ASSERT語句中使用了主動表達式,編譯器不會發出任何警告。在發行模式下編譯時該表達式會被直接刪除,從而導致程序運行的錯誤。由于發行版程序不含調試信息,這種類型的錯誤是很難找到原因的。

 

 

 

 

 

 

 

 

 

 

 

 

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲精品资源| 亚洲国产裸拍裸体视频在线观看乱了中文 | 亚洲高清不卡av| 欧美一区国产一区| 欧美视频中文一区二区三区在线观看 | 99天天综合性| 亚洲免费激情| 欧美日韩在线影院| 久久精品人人做人人爽| 国产精品丝袜白浆摸在线| 在线亚洲免费| 亚洲经典在线看| 韩日成人在线| 欧美婷婷六月丁香综合色| 免费成人高清在线视频| 艳妇臀荡乳欲伦亚洲一区| 久久亚裔精品欧美| 99亚洲一区二区| 午夜视频精品| 亚洲二区三区四区| 国产欧美一区二区精品性| 久久久在线视频| 亚洲欧美偷拍卡通变态| 午夜一区二区三区在线观看| 精品动漫一区二区| 国产一区二区三区四区老人| 蜜臀a∨国产成人精品 | 久久一区国产| 日韩亚洲一区二区| 日韩亚洲欧美一区二区三区| aaa亚洲精品一二三区| 亚洲人成在线影院| 国产精品大片wwwwww| 欧美日韩在线观看一区二区| 欧美日韩直播| 日韩一级大片在线| 欧美在线看片| 亚洲国产小视频| 韩日精品视频一区| 欧美日韩综合另类| 欧美激情综合网| 国产精品入口| 韩日视频一区| 狠狠狠色丁香婷婷综合激情| 欧美日韩蜜桃| 欧美视频精品在线观看| 欧美日韩另类视频| 欧美女同视频| 亚洲国产精品成人综合色在线婷婷| 国产精品美女久久久久久久| 亚洲国产另类精品专区| 亚洲午夜电影网| 亚洲在线不卡| 一区二区日韩| 免费观看成人| 国产一区二区按摩在线观看| 黄色成人免费网站| 99精品欧美一区二区三区综合在线| 香蕉乱码成人久久天堂爱免费| 亚洲一区二区三区精品在线观看| 久久精品亚洲精品国产欧美kt∨| 欧美大成色www永久网站婷| 亚洲国产一区二区三区高清| 性欧美1819性猛交| 欧美少妇一区二区| 在线观看一区视频| 久久亚洲精品欧美| 亚洲网站视频| 9久草视频在线视频精品| 久久久精品性| 极品尤物久久久av免费看| 久久国产精品亚洲77777| 亚洲国产精品激情在线观看| 裸体女人亚洲精品一区| 国产专区精品视频| 老司机午夜免费精品视频| 久久精品在线免费观看| 国语自产精品视频在线看抢先版结局| 欧美在线一区二区三区| 欧美电影在线观看| 亚洲一区二区三区午夜| 亚洲在线观看免费| 国产亚洲aⅴaaaaaa毛片| 欧美在线一二三区| 欧美日韩精品免费看 | 欧美区日韩区| 一区二区三区日韩| 久久久精品tv| 亚洲国产成人在线视频| 亚洲电影免费观看高清完整版在线观看| 国产精品视频专区| 另类欧美日韩国产在线| 影音先锋欧美精品| 麻豆成人综合网| 欧美精品在线观看91| 亚洲福利视频一区二区| 欧美日韩在线三区| 久久综合网hezyo| 国产精品蜜臀在线观看| 亚洲国产精选| 亚洲黄色成人| 欧美视频在线免费看| 国产精品伦理| 日韩视频在线观看| 国产精品免费一区豆花| 亚洲福利视频三区| 欧美成人免费小视频| 午夜亚洲一区| 国产精品成人一区二区| 亚洲专区欧美专区| 亚洲一级在线观看| 欧美久久久久久久| 性做久久久久久久久| 欧美一区二区三区视频免费播放| 国产精品久久久一本精品| 亚洲大胆视频| 一区二区三区自拍| 欧美资源在线| 欧美成人国产| 国产日韩在线看| 欧美一区二区视频在线| 性一交一乱一区二区洋洋av| 欧美三级电影网| 99riav国产精品| 免费成人在线视频网站| 亚洲高清网站| 欧美日韩亚洲一区二区三区在线 | 久久夜色精品国产亚洲aⅴ| 性高湖久久久久久久久| 在线成人av| 欧美激情区在线播放| 欧美一区二区三区播放老司机| 亚洲婷婷综合久久一本伊一区| 欧美视频网址| 欧美一区二区三区免费观看视频| 狠狠做深爱婷婷久久综合一区| 欧美日韩精品一区二区三区四区 | 亚洲国产日韩美| 亚洲成在人线av| 国产欧美一区二区三区另类精品 | 欧美aⅴ一区二区三区视频| 亚洲电影观看| 欧美超级免费视 在线| 亚洲欧美一级二级三级| 影音先锋另类| 国产精品影院在线观看| 国产欧美日韩不卡| 1204国产成人精品视频| 在线看无码的免费网站| 欧美精品一区二区精品网| 亚洲欧美成人网| 午夜精品免费| 国产精品国产三级国产aⅴ9色| 国产乱码精品一区二区三区av| 美女国产精品| 欧美三级视频在线| 国产亚洲精品久久久久动| 黄色成人精品网站| 性做久久久久久久久| 免费亚洲电影在线| 久久久久**毛片大全| 亚洲精品久久久久久久久久久久 | aⅴ色国产欧美| 欧美在线看片| 国产精品99久久久久久久vr | 亚洲第一福利视频| 亚洲欧洲中文日韩久久av乱码| 亚洲人www| 久久一区二区三区国产精品| 欧美肥婆bbw| 一二美女精品欧洲| 久热精品视频在线观看| 免费黄网站欧美| 国内揄拍国内精品少妇国语| 久久国内精品自在自线400部| 亚洲美女电影在线| 欧美日韩精品二区第二页| 极品av少妇一区二区| 麻豆国产精品一区二区三区 | 一区二区亚洲| 亚洲欧美中文字幕| 亚洲欧洲精品天堂一级| 久久精品视频在线播放| 好看的av在线不卡观看| 日韩系列欧美系列| 一本久久综合亚洲鲁鲁| 免费不卡欧美自拍视频| 亚洲国产欧美久久| 亚洲精品中文字幕在线| 免费日韩精品中文字幕视频在线| 国产精品久久久久久久一区探花| 亚洲一区日韩| 欧美影院视频| 最新亚洲电影| 一区二区日韩伦理片| 国产亚洲欧美日韩美女| 欧美一级淫片aaaaaaa视频| 日韩视频免费| 激情久久久久久久| 亚洲婷婷综合色高清在线|