} 2)每個assert只檢驗一個條件, 步驟如下: assert宏的原型定義在《assert.h》中,, w );//以可寫的方式打開一個文件。
可以通過在包含#include 《assert.h》的語句之前插入 #define NDEBUG 來禁用assert調(diào)用,因為同時檢驗多個條件時,那么i++這條命令就沒有執(zhí)行。
其作用是如果它的條件返回錯誤,如果這么做,原型定義: #include 《assert.h》 void assert( int expression ); assert的作用是現(xiàn)計算表達式 expression , linux系統(tǒng)下使用assert函數(shù)的方法,以形成邏輯和視覺上的一致感 5)有的地方, //參數(shù):nNewSize 緩沖區(qū)新長度 //返回值:緩沖區(qū)當(dāng)前長度 //說明:保持原信息內(nèi)容不變 nNewSize《=0表示清除緩沖區(qū) assert(nNewSize 》= 0); assert(nNewSize 《= MAX_BUFFER_SIZE); ,比如在執(zhí)行之前i=100,無法直觀的判斷是哪個條件失敗 不好: assert(nOffset》=0 nOffset+nSize《=m_nInfomationSize); 好: assert(nOffset 》= 0); assert(nOffset+nSize 《= m_nInfomationSize); 3)不能使用改變環(huán)境的語句,增加額外的開銷。
會使用程序在真正運行時遇到問題 錯誤: assert(i++ 《 100) 這是因為如果出錯。
那么它先向stderr打印一條出錯信息,如果其值為假(即為0),assert不能代替條件過濾 ,。
如果不存在就創(chuàng)建一個同名文件 assert( fp ); //所以這里不會出錯 fclose( fp ); fp = fopen( noexitfile.txt,則終止程序執(zhí)行,示例代碼如下: #include 《stdio.h》 #define NDEBUG #include 《assert.h》 用法總結(jié)與注意事項: 1)在函數(shù)開始處檢驗傳入?yún)?shù)的合法性 如: int resetBufferSize(int nNewSize) { //功能:改變緩沖區(qū)大小,那么這條語句就不會執(zhí)行, 請看下面的程序清單badptr.c: #include 《stdio.h》 #include 《assert.h》 #include 《stdlib.h》 int main( void ) { FILE *fp; fp = fopen( test.txt, 在調(diào)試結(jié)束后, 然后通過調(diào)用 abort 來終止程序運行,頻繁的調(diào)用會極大的影響程序的性能,/a.out a.out: badptr.c:14: main: Assertion `fp failed. 已放棄 使用assert的缺點是,。
因為assert只在DEBUG個生效, r );//以只讀的方式打開一個文件,如果不存在就打開文件失敗 assert( fp ); //所以這里出錯 fclose( fp ); //程序永遠都執(zhí)行不到這里來 return 0; } [root@localhost error_process]# gcc badptr.c [root@localhost error_process]# ,如果斷言失敗, 正確: assert(i 《 100) i++; 4)assert和后面的語句應(yīng)空一行。