我來(lái)教你linux系統(tǒng)下如何使用assert函數(shù)
我來(lái)教你linux系統(tǒng)下如何使用assert函數(shù)
步驟如下:assert宏的原型定義在《assert.h》中,其作用是如果它的條件返回錯(cuò)誤,則終止程序執(zhí)行,原型定義。#include《assert.h》。voidassert(intexpression)。assert的作用是現(xiàn)計(jì)算表達(dá)式expression,如果其值為假(即為0),那么它先向stderr打印一條出錯(cuò)信息。然后通過(guò)調(diào)用abort來(lái)終止程序運(yùn)行。請(qǐng)看下面的程序清單badptr.c。#include《stdio.h》。#include《assert.h》。#include《stdlib.h》。intmain(void)。{;FILE*fp。fp=fopen(“test.txt”,“w”);//以可寫(xiě)的方式打開(kāi)一個(gè)文件,如果不存在就創(chuàng)建一個(gè)同名文件。
導(dǎo)讀步驟如下:assert宏的原型定義在《assert.h》中,其作用是如果它的條件返回錯(cuò)誤,則終止程序執(zhí)行,原型定義。#include《assert.h》。voidassert(intexpression)。assert的作用是現(xiàn)計(jì)算表達(dá)式expression,如果其值為假(即為0),那么它先向stderr打印一條出錯(cuò)信息。然后通過(guò)調(diào)用abort來(lái)終止程序運(yùn)行。請(qǐng)看下面的程序清單badptr.c。#include《stdio.h》。#include《assert.h》。#include《stdlib.h》。intmain(void)。{;FILE*fp。fp=fopen(“test.txt”,“w”);//以可寫(xiě)的方式打開(kāi)一個(gè)文件,如果不存在就創(chuàng)建一個(gè)同名文件。
只要看得懂程序的人都知道assert,在Windows下使用VC編寫(xiě),使用assert之后,只需在IDE中設(shè)置為debug版或者是release版,編譯器就會(huì)自動(dòng)忽略掉assert。但是在Linux下,必須要在編譯命令中加入-DNDEBUG中,系統(tǒng)編譯時(shí)才不會(huì)將assert編譯進(jìn)去。不然,程序運(yùn)行時(shí)有可能會(huì)被assert中斷。那linux系統(tǒng)下如何使用assert函數(shù)呢?下面就和大家說(shuō)一下linux系統(tǒng)下使用assert函數(shù)的方法。步驟如下:assert宏的原型定義在《assert.h》中,其作用是如果它的條件返回錯(cuò)誤,則終止程序執(zhí)行,原型定義:#include《assert.h》voidassert(intexpression);assert的作用是現(xiàn)計(jì)算表達(dá)式expression,如果其值為假(即為0),那么它先向stderr打印一條出錯(cuò)信息,然后通過(guò)調(diào)用abort來(lái)終止程序運(yùn)行。請(qǐng)看下面的程序清單badptr.c:#include《stdio.h》#include《assert.h》#include《stdlib.h》intmain(void){FILE*fp;fp=fopen(“test.txt”,“w”);//以可寫(xiě)的方式打開(kāi)一個(gè)文件,如果不存在就創(chuàng)建一個(gè)同名文件assert(fp);//所以這里不會(huì)出錯(cuò)fclose(fp);fp=fopen(“noexitfile.txt”,“r”);//以只讀的方式打開(kāi)一個(gè)文件,如果不存在就打開(kāi)文件失敗assert(fp);//所以這里出錯(cuò)fclose(fp);//程序永遠(yuǎn)都執(zhí)行不到這里來(lái)return0;}[root@localhosterror_process]#gccbadptr.c[root@localhosterror_process]#。/a.outa.out:badptr.c:14:main:Assertion`fp‘Failed.已放棄使用assert的缺點(diǎn)是,頻繁的調(diào)用會(huì)極大的影響程序的性能,增加額外的開(kāi)銷。在調(diào)試結(jié)束后,可以通過(guò)在包含#include《assert.h》的語(yǔ)句之前插入#defineNDEBUG來(lái)禁用assert調(diào)用,示例代碼如下:#include《stdio.h》#defineNDEBUG#include《assert.h》用法總結(jié)與注意事項(xiàng):1)在函數(shù)開(kāi)始處檢驗(yàn)傳入?yún)?shù)的合法性如:intresetBufferSize(intnNewSize){//功能:改變緩沖區(qū)大小,//參數(shù):nNewSize緩沖區(qū)新長(zhǎng)度//返回值:緩沖區(qū)當(dāng)前長(zhǎng)度//說(shuō)明:保持原信息內(nèi)容不變nNewSize《=0表示清除緩沖區(qū)assert(nNewSize》=0);assert(nNewSize《=MAX_BUFFER_SIZE);。。。}2)每個(gè)assert只檢驗(yàn)一個(gè)條件,因?yàn)橥瑫r(shí)檢驗(yàn)多個(gè)條件時(shí),如果斷言失敗,無(wú)法直觀的判斷是哪個(gè)條件失敗不好:assert(nOffset》=0&&nOffset+nSize《=m_nInfomationSize);好:assert(nOffset》=0);assert(nOffset+nSize《=m_nInfomationSize);3)不能使用改變環(huán)境的語(yǔ)句,因?yàn)閍ssert只在DEBUG個(gè)生效,如果這么做,會(huì)使用程序在真正運(yùn)行時(shí)遇到問(wèn)題錯(cuò)誤:assert(i++《100)這是因?yàn)槿绻鲥e(cuò),比如在執(zhí)行之前i=100,那么這條語(yǔ)句就不會(huì)執(zhí)行,那么i++這條命令就沒(méi)有執(zhí)行。正確:assert(i《100)i++;4)assert和后面的語(yǔ)句應(yīng)空一行,以形成邏輯和視覺(jué)上的一致感5)有的地方,assert不能代替條件過(guò)濾上述也就是linux系統(tǒng)下使用assert函數(shù)方法的全部?jī)?nèi)容了。如你還不知道在linux系統(tǒng)下如何使用assert函數(shù)的,不妨請(qǐng)你先看看上述的內(nèi)容??!看完了你也就知道怎么使用assert函數(shù)了。有興趣的用戶可以去來(lái)了解一下。
我來(lái)教你linux系統(tǒng)下如何使用assert函數(shù)
步驟如下:assert宏的原型定義在《assert.h》中,其作用是如果它的條件返回錯(cuò)誤,則終止程序執(zhí)行,原型定義。#include《assert.h》。voidassert(intexpression)。assert的作用是現(xiàn)計(jì)算表達(dá)式expression,如果其值為假(即為0),那么它先向stderr打印一條出錯(cuò)信息。然后通過(guò)調(diào)用abort來(lái)終止程序運(yùn)行。請(qǐng)看下面的程序清單badptr.c。#include《stdio.h》。#include《assert.h》。#include《stdlib.h》。intmain(void)。{;FILE*fp。fp=fopen(“test.txt”,“w”);//以可寫(xiě)的方式打開(kāi)一個(gè)文件,如果不存在就創(chuàng)建一個(gè)同名文件。
為你推薦