編譯器内置宏:
先介紹幾個編譯器内置的宏定義,這些宏定義不僅可以幫助我們完成跨平台的源碼編寫,靈活使用也可以巧妙地幫我們輸出非常有用的調試資訊。
ANSI C标準中有幾個标準預定義宏(也是常用的):
__LINE__:在源代碼中插入目前源代碼行号;
__FILE__:在源檔案中插入目前源檔案名;
__DATE__:在源檔案中插入目前的編譯日期
__TIME__:在源檔案中插入目前編譯時間;
__STDC__:當要求程式嚴格遵循ANSI C标準時該辨別被指派為1;
__cplusplus:當編寫C++程式時該辨別符被定義。
編譯器在進行源碼編譯的時候,會自動将這些宏替換為相應内容。
看到這裡,你的眼睛應該一亮了吧,嗯,是的,__FILE__和__LINE__正是我們前面想要的輸出的,于是,我們的每一條語句都變成了:
DEBUG("FILE: %s, LINE: %d…",__FILE__,__LINE__,…)
其實沒有必要,__FILE__本身就會被編譯器置換為字元常量,于是乎我們的語句又變成了這樣:
DEBUG("FILE:"__FILE__", LINE: %d…",__LINE__,…)
但是,我們還是不滿足,依然發現,還是很讨厭,為什麼每條語句都要寫"FILE:"__FILE__", LINE: %d 以及,__LINE,這兩個部分呢?這不是浪費我們時間麼?
哈哈,是的,這就是本次大結局,把DEBUG寫成這樣:
DEBUG(format,...) printf("FILE: "__FILE__", LINE: %d: "format"/n", __LINE__, ##__VA_ARGS__)
沒錯,就是這樣!下面,所有的DEBUG資訊都會按照這樣的方式輸出:
FILE: xxx, LINE: xxx, …….
最後:
最後,老規矩,coding測試。
- //============================================================================
- // Name : debug.cpp
- // Author : boyce
- // Version : 1.0
- // Copyright : pku
- // Description : Hello World in C++, Ansi-style
- #include
- #define __DEBUG__
- #ifdef __DEBUG__
- #define DEBUG(format,...) printf("File: "__FILE__", Line: %05d: "format"/n", __LINE__, ##__VA_ARGS__)
- #else
- #define DEBUG(format,...)
- #endif
- int main() {
- char str[]="Hello World";
- DEBUG("A ha, check me: %s",str);
- return 0;
- }
測試結果:

轉自:http://www.cnblogs.com/lixiaohui-ambition/archive/2012/08/21/2649052.html
除此之外還有__FUNCTION__宏