assert宏的原型定義在assert.h中,其作用是如果它的條件返回錯誤,則終止程序執行.
1 #include "assert.h" 2 void assert( int expression );
使用assert的缺點是,頻繁的調用會極大的影響程序的性能,增加額外的開銷。
在調試結束後,可以通過在包含#include 的語句之前插入 #define NDEBUG 來禁用assert調用,示例代碼如下:
1 #include 2 #define NDEBUG 3 #include
值得注意的是:每個assert只檢驗一個條件,因爲同時檢驗多個條件時,如果斷言失敗,無法直觀的判斷是哪個條件失敗
不好:
assert(nOffset>=0 && nOffset+nSize<=m_nInfomationSize); <span><span></span></span>
好: assert(nOffset >= 0);
assert(nOffset+nSize <= m_nInfomationSize);
不能使用改變環境的語句,因爲assert只在DEBUG個生效,如果這麼做,會使用程序在真正運行時遇到問題
錯誤:
assert(i++ < 100);
這是因爲如果出錯,比如在執行之前i=100,那麼這條語句就不會執行,那麼i++這條命令就沒有執行。
assert(i < 100);
i++;
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
int main(void)
{
FILE *fp1, *fp2;
fp1 = fopen("test.txt", "w");
assert(fp1);
fclose(fp1);
fp2 = fopen("noexitfile.txt", "r");
assert(fp2);
fclose(fp2);
return 0;
}