Debug版和Release版的程序
程序在開發(fā)過程中必然有許多程序員加的調(diào)試信息。我曾經(jīng)參與過這樣的事:當(dāng)程序開發(fā)結(jié)束時(shí),群眾被發(fā)動起來刪除程序中的調(diào)試信息,何必呢?為什么不像VC
++那樣建立兩個(gè)版本的目標(biāo)代碼?一個(gè)是debug版本的,一個(gè)是Release版的。那些調(diào)試信息是那么的寶貴,在日后的維護(hù)過程中也是很寶貴的東西,
怎么能說刪除就刪除呢?利用預(yù)編譯技術(shù)吧,如下所示聲明調(diào)試函數(shù):
#ifdef DEBUG
void TRACE(char* fmt, ...)
{
......
}
#else
#define TRACE(char* fmt, ...)
#endif
于是,讓所有的程序都用TRACE輸出調(diào)試信息,只需要在在編譯時(shí)加上一個(gè)參數(shù)“-DDEBUG”,如:
cc -DDEBUG -o target target.c
于是,預(yù)編譯器發(fā)現(xiàn)DEBUG變量被定義了,就會使用TRACE函數(shù)。而如果要發(fā)布給用戶了,那么只需要把取消“-DDEBUG”的參數(shù),于是所有用到
TRACE宏,這個(gè)宏什么都沒有,所以源程序中的所有TRACE語言全部被替換成了空。一舉兩得,一箭雙雕,何樂而不為呢?
順便提一下,幾個(gè)個(gè)很有用的系統(tǒng)宏,一個(gè)是“__FILE__”,一個(gè)是“__LINE__”,分別表示,所在的源文件和行號,當(dāng)你調(diào)試信息或是輸出錯(cuò)誤
時(shí),可以使用這兩個(gè)宏,讓你一眼就能看出你的錯(cuò)誤,出現(xiàn)在哪個(gè)文件的第幾行中。這對于用C/C++做的大工程非常的管用;另外兩個(gè):一個(gè)是
“__TIME__”、一個(gè)是“__DATE__”,分別表示執(zhí)行到調(diào)用該宏的時(shí)候的系統(tǒng)時(shí)間和日期,這在日志中記錄時(shí)間時(shí)很方便。