一般在寫一個項目的時候,為了更直觀的調(diào)試,我們在程序里都會打printf調(diào)試語句,隨著項目越寫越多,printf也會越來越多,但項目準(zhǔn)備結(jié)尾的時候,這時候開始優(yōu)化就會發(fā)現(xiàn),你想完全把printf語句都刪除了,又怕后面項目出問題找不到問題點(diǎn)在哪里,不刪項目一執(zhí)行就有好多調(diào)試語句干擾觀察,同時還會拖慢系統(tǒng),影響效率,這點(diǎn)在單片機(jī)上是見怪不怪了,還有一種情況,有時候打印會打相同的消息,這樣就分不清到底是哪個函數(shù)打印的,于是找問題都要找好久,于是我們需要一個更加有藝術(shù)感的調(diào)試封裝。
如上代碼,當(dāng)定義了__DEBUG_VERSION,使用DEBUG函數(shù)就會執(zhí)行
printf("[File:%s, Line:%d] "format, __FILE__, __LINE__, ##__VA_ARGS__)
如果沒有定義,那么就什么都不會執(zhí)行,我們可以在第一篇文章那個例程里實驗看看:
void Create_Default_InI_File(void){FILE *Default_ini = NULL ;Default_ini = fopen(CONFIG_NAME,"w");fprintf(Default_ini,"[Setting]\n""INIT_FLAG=0;\n""VOLUME=1;\n""LANGUAGE=1;\n");fclose(Default_ini);}int main(void){int Init_flag ;int Volume_flag ;int English_flag ;/*1、創(chuàng)建一個默認(rèn)的Config.ini文件*/Create_Default_InI_File();/*2、解析Config.ini文件獲得參數(shù)*/dictionary *Config_ini = NULL;/*3、加載Config.ini文件*/Config_ini = iniparser_load(CONFIG_NAME);if(NULL == Config_ini){printf("cannot parse %s file\n",CONFIG_NAME);return -1 ;}/*4、將字典轉(zhuǎn)儲到打開的文件指針。*/iniparser_dump(Config_ini,stderr);/*5、分別獲取上述創(chuàng)建的InI文件里的幾個項目的值*/Init_flag = iniparser_getint(Config_ini,"Setting:INIT_FLAG",-1);Volume_flag = iniparser_getint(Config_ini,"Setting:VOLUME",-1);English_flag = iniparser_getint(Config_ini,"Setting:LANGUAGE",-1);DEBUG("Init_flag:%d\n",Init_flag);DEBUG("Volume_flag:%d\n",Volume_flag);DEBUG("English_flag:%d\n",English_flag);/*5、更改其中的INIT_FLAG項的值*/iniparser_set(Config_ini,"Setting:INIT_FLAG","1");Init_flag = iniparser_getint(Config_ini,"Setting:INIT_FLAG",-1);Volume_flag = iniparser_getint(Config_ini,"Setting:VOLUME",-1);English_flag = iniparser_getint(Config_ini,"Setting:LANGUAGE",-1);DEBUG("Init_flag:%d\n",Init_flag);DEBUG("Volume_flag:%d\n",Volume_flag);DEBUG("English_flag:%d\n",English_flag);/*6、釋放字典*/iniparser_freedict(Config_ini);return 0;}
運(yùn)行結(jié)果:
當(dāng)你打印的時候,調(diào)試會告訴你這是哪個文件哪一行打的,是不是很方便?但是這樣的僅僅起到一個要不全部不執(zhí)行,要不全執(zhí)行的效果。如果想做更強(qiáng)大一點(diǎn),那我們可以結(jié)合C語言宏定義的特性把這個再給優(yōu)化一下,這點(diǎn)留給讀者自己去嘗試。
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點(diǎn),不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!





