技術(shù)員聯(lián)盟提供win764位系統(tǒng)下載,win10,win7,xp,裝機(jī)純凈版,64位旗艦版,綠色軟件,免費(fèi)軟件下載基地!

當(dāng)前位置:主頁(yè) > 教程 > 服務(wù)器類(lèi) >

linux系統(tǒng)下如何使用assert函數(shù)

來(lái)源:技術(shù)員聯(lián)盟┆發(fā)布時(shí)間:2017-04-28 13:53┆點(diǎn)擊:

} 2)每個(gè)assert只檢驗(yàn)一個(gè)條件, 步驟如下: assert宏的原型定義在《assert.h》中,, w );//以可寫(xiě)的方式打開(kāi)一個(gè)文件。

可以通過(guò)在包含#include 《assert.h》的語(yǔ)句之前插入 #define NDEBUG 來(lái)禁用assert調(diào)用,因?yàn)橥瑫r(shí)檢驗(yàn)多個(gè)條件時(shí),那么i++這條命令就沒(méi)有執(zhí)行。

其作用是如果它的條件返回錯(cuò)誤,如果這么做,原型定義: #include 《assert.h》 void assert( int expression ); assert的作用是現(xiàn)計(jì)算表達(dá)式 expression , linux系統(tǒng)下使用assert函數(shù)的方法,以形成邏輯和視覺(jué)上的一致感 5)有的地方, //參數(shù):nNewSize 緩沖區(qū)新長(zhǎng)度 //返回值:緩沖區(qū)當(dāng)前長(zhǎng)度 //說(shuō)明:保持原信息內(nèi)容不變 nNewSize《=0表示清除緩沖區(qū) assert(nNewSize 》= 0); assert(nNewSize 《= MAX_BUFFER_SIZE); ,比如在執(zhí)行之前i=100,無(wú)法直觀的判斷是哪個(gè)條件失敗 不好: assert(nOffset》=0 nOffset+nSize《=m_nInfomationSize); 好: assert(nOffset 》= 0); assert(nOffset+nSize 《= m_nInfomationSize); 3)不能使用改變環(huán)境的語(yǔ)句,增加額外的開(kāi)銷(xiāo)。

會(huì)使用程序在真正運(yùn)行時(shí)遇到問(wèn)題 錯(cuò)誤: assert(i++ 《 100) 這是因?yàn)槿绻鲥e(cuò)。

那么它先向stderr打印一條出錯(cuò)信息,如果其值為假(即為0),assert不能代替條件過(guò)濾 ,。

如果不存在就創(chuàng)建一個(gè)同名文件 assert( fp ); //所以這里不會(huì)出錯(cuò) fclose( fp ); fp = fopen( noexitfile.txt,則終止程序執(zhí)行,示例代碼如下: #include 《stdio.h》 #define NDEBUG #include 《assert.h》 用法總結(jié)與注意事項(xiàng): 1)在函數(shù)開(kāi)始處檢驗(yàn)傳入?yún)?shù)的合法性 如: int resetBufferSize(int nNewSize) { //功能:改變緩沖區(qū)大小,那么這條語(yǔ)句就不會(huì)執(zhí)行, 請(qǐng)看下面的程序清單badptr.c: #include 《stdio.h》 #include 《assert.h》 #include 《stdlib.h》 int main( void ) { FILE *fp; fp = fopen( test.txt, 在調(diào)試結(jié)束后, 然后通過(guò)調(diào)用 abort 來(lái)終止程序運(yùn)行,頻繁的調(diào)用會(huì)極大的影響程序的性能,/a.out a.out: badptr.c:14: main: Assertion `fp failed. 已放棄 使用assert的缺點(diǎn)是,。

因?yàn)閍ssert只在DEBUG個(gè)生效, r );//以只讀的方式打開(kāi)一個(gè)文件,如果不存在就打開(kāi)文件失敗 assert( fp ); //所以這里出錯(cuò) fclose( fp ); //程序永遠(yuǎn)都執(zhí)行不到這里來(lái) return 0; } [root@localhost error_process]# gcc badptr.c [root@localhost error_process]# ,如果斷言失敗, 正確: assert(i 《 100) i++; 4)assert和后面的語(yǔ)句應(yīng)空一行。