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

斷言的使用

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>
            免费成人在线观看视频| 国产一区二区高清视频| 亚洲一区二区三区中文字幕在线| 榴莲视频成人在线观看| 久久免费视频这里只有精品| 欧美中文字幕第一页| 久久丁香综合五月国产三级网站| 中文精品在线| 午夜精品一区二区三区电影天堂 | 黑人巨大精品欧美一区二区| 国产嫩草影院久久久久 | 欧美在线观看一区二区| 久久久夜夜夜| 国产精品色一区二区三区| 国产在线视频欧美| 日韩图片一区| 久久人人爽人人| 一区二区三区高清视频在线观看| 亚洲欧美www| 欧美精品三级在线观看| 国产精品一香蕉国产线看观看| 一区二区三区在线视频免费观看| 91久久精品网| 久久综合国产精品| 亚洲视频中文| 欧美日本二区| 亚洲欧洲精品一区二区| 久久久久久久久一区二区| 日韩亚洲不卡在线| 欧美一区二区三区精品电影| 91久久精品网| 亚洲欧美日韩综合| 国产精品欧美在线| 亚洲欧美另类久久久精品2019| 欧美激情国产日韩| 欧美大片免费观看| 最新国产成人av网站网址麻豆| 久久人人97超碰精品888 | 蜜臀av一级做a爰片久久| 亚洲午夜精品在线| 国产精品黄色在线观看| 亚洲制服av| 欧美有码视频| 亚洲国产成人高清精品| 欧美黑人多人双交| 欧美久久久久久蜜桃| 一区二区三区四区在线| 亚洲私人影吧| 伊人夜夜躁av伊人久久| 亚洲高清三级视频| 欧美午夜欧美| 欧美电影免费观看| 国产精品高潮呻吟久久av无限| 欧美影院在线| 欧美日韩视频专区在线播放| 久久9热精品视频| 免费中文日韩| 久久精品视频网| 欧美成熟视频| 先锋资源久久| 欧美连裤袜在线视频| 亚洲在线视频免费观看| 美女精品网站| 国产精品免费久久久久久| 久久这里只有精品视频首页| 欧美激情一区二区三区全黄| 久久精品国产2020观看福利| 欧美高清不卡在线| 久久欧美肥婆一二区| 国产精品视频一| 一区二区三区回区在观看免费视频| 亚洲第一网站免费视频| 亚洲欧美另类在线| 国产精品美女久久久久久久 | 亚洲第一狼人社区| 亚洲自拍电影| 亚洲麻豆国产自偷在线| 久久免费的精品国产v∧| 欧美诱惑福利视频| 国产色综合网| 久久国产99| 欧美成人午夜激情| 日韩系列欧美系列| 欧美三区在线视频| 一区二区三区四区五区精品| 亚洲欧美日韩天堂| 国产性猛交xxxx免费看久久| 午夜精品久久久久| 欧美激情在线观看| 一区二区三区久久精品| 国产精品久久久免费| 久久免费视频网| 日韩视频免费观看高清在线视频| 午夜精品av| 亚洲精品无人区| 国产日韩一区二区三区| 欧美va亚洲va国产综合| 欧美在线一二三区| 亚洲国产成人精品女人久久久| 午夜精品久久久久久久蜜桃app| 亚洲欧美日韩综合aⅴ视频| 久久在线免费| 久久精品一二三| 日韩午夜三级在线| 亚洲精品免费在线播放| 韩国一区电影| 国产午夜精品福利| 国产亚洲一级高清| 国产乱码精品一区二区三区五月婷| 欧美激情在线| 老司机久久99久久精品播放免费 | 久久午夜国产精品| 欧美一级久久久久久久大片| 亚洲性感激情| 亚洲午夜未删减在线观看| 亚洲人成7777| 亚洲精品视频在线播放| 亚洲欧洲精品一区| 日韩视频一区二区三区在线播放 | 欧美黑人在线播放| 欧美激情日韩| 亚洲一区二区伦理| 欧美一级视频精品观看| 久久尤物视频| 欧美性猛片xxxx免费看久爱 | 91久久久久久| 亚洲影院色在线观看免费| 欧美一区二区黄| 亚洲激情视频网站| 亚洲婷婷综合久久一本伊一区| 午夜精品电影| 久久久久成人网| 欧美激情1区2区3区| 亚洲国产精品一区二区尤物区| 亚洲视屏一区| 欧美精品电影在线| 激情六月婷婷综合| 亚洲自拍偷拍网址| 亚洲国产婷婷综合在线精品| 欧美一区观看| 国产精品女主播| 亚洲另类一区二区| 欧美激情aaaa| 久久久久综合网| 韩国v欧美v日本v亚洲v| 久久成人国产| 欧美中文在线免费| 国产欧美日本| 欧美亚洲视频一区二区| 一本色道久久综合亚洲精品高清| 久久一二三国产| 亚洲激情在线播放| 欧美黄污视频| 国产精品99免视看9| 亚洲欧美色婷婷| 欧美一区二区三区视频在线| 国产精品毛片| 久久久亚洲一区| 欧美激情综合| 欧美一区二区日韩一区二区| 亚洲欧美日韩一区二区三区在线观看| 国产精品久久久久aaaa| 欧美一区二区视频网站| 久久青草欧美一区二区三区| 亚洲国产精品第一区二区三区| 亚洲高清免费| 国产一区在线播放| 亚洲三级国产| 永久免费毛片在线播放不卡| 亚洲福利视频一区二区| 国产精品国产馆在线真实露脸| 欧美制服第一页| 国产精品福利在线| 亚洲国产一区二区三区高清| 欧美日韩久久不卡| 免费在线日韩av| 国产久一道中文一区| 亚洲激情中文1区| 亚洲欧美经典视频| 99精品久久| 免费成人在线视频网站| 久久久www成人免费无遮挡大片| 欧美久久电影| 欧美日韩亚洲91| 老司机一区二区| 国产欧美日韩一区| 亚洲性人人天天夜夜摸| 夜夜狂射影院欧美极品| 久久亚洲精品网站| 美女精品一区| 亚洲国产cao| 欧美激情视频在线播放| 欧美激情一区二区三区| 136国产福利精品导航网址应用| 欧美在线一二三区| 欧美高清影院| 亚洲夜间福利| 国产一区亚洲| 欧美激情中文不卡| 亚洲一二三区在线|