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