程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> ASSER、VERIFY、TRACE詳解

ASSER、VERIFY、TRACE詳解

編輯:C++入門知識

ASSERT()被測試它的參數,如果參數為零,則中斷執行並打印一段說明消息。在Release版本的程序中它不起任何作用。

ASSERT()使用的時候必須保證參數表達式中不能有函數調用,因此對於任何有函數調用的參數表達式,應該使用宏VERIFY(),以保證表達式中的函數調用在Release版本中會被正確求值。

斷言(assertion)用斷言信息(程序,模塊,assertion行)的對話框執行,對話框右三個按鈕:"Break ","Re[eat"("Debug"),and "continue"("Ignore"). "Break"結束程序,"continue"忽略斷言,最有用的是"Repeat"按鈕,按下它在斷言的地方開源代碼編輯器。在這裡你可以測試所有的變量並明白哪裡出了問題。

例如:ASSERT(pPointer);ASSERT(n>0 && n<100);ASSERT(0);

ASSERT在執行簡單驗證時很有用,但對於c++對象,特別是用cobject派生的對象,則有更好的方法ASSERT_VALID來實現類似操作。作為一般規則,我們應在開始時用每一個對象之前檢查數據訛誤,

ASSERT_VALID(this);ASSERT_VALID(pView);

VERIFY()

VERIFY ()和ASSERT()很相似,區別在於Release版本中它仍然有效.

TRACE()

TRACE()基本上就是函數printf()的一個復制品,唯一的區別在於它把結果輸出到調試窗口。在Release版本中它是無效的。一般是用TRACE0(),TRACE1()。TRACE2()。。。而不用TRACE()。

這三個宏在Release版本中都不會產生任何實質性的影響,他們是否起作用取決於是否定義了預訂義了宏/

常用用法:

為了控制傳用指針:

void SomeFun(SomeType* pPointer)

{

       ASSERT(pPointer);

//some instrctions。

}
你可以在“switch”和“if”操作中捕獲奇怪的值

例如:if(nWaterTemp〉=0 && nWaterTemp<50)

{

     //some instrction

}

else if(nWaterTemp>=50 && nWaterTemp<=100

{

    //some instruction.

}

else {

ASSERT(0);

}

對值得斷言:

ASSERT(nSomeValue>=MinValue and nSomeValue<=MaxValue);

ASSERT(nOtherValue !=0)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved