天天看點

編譯器内置宏__LINE__&__FUNCTION__

編譯器内置宏:

先介紹幾個編譯器内置的宏定義,這些宏定義不僅可以幫助我們完成跨平台的源碼編寫,靈活使用也可以巧妙地幫我們輸出非常有用的調試資訊。

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測試。

  1. //============================================================================  
  2. // Name : debug.cpp  
  3. // Author : boyce  
  4. // Version : 1.0  
  5. // Copyright : pku  
  6. // Description : Hello World in C++, Ansi-style  
  7. #include  
  8. #define __DEBUG__  
  9. #ifdef __DEBUG__  
  10. #define DEBUG(format,...) printf("File: "__FILE__", Line: %05d: "format"/n", __LINE__, ##__VA_ARGS__)  
  11. #else  
  12. #define DEBUG(format,...)  
  13. #endif  
  14. int main() {  
  15.     char str[]="Hello World";  
  16.     DEBUG("A ha, check me: %s",str);  
  17.     return 0;  
  18. }  

測試結果:

編譯器内置宏__LINE__&__FUNCTION__

轉自:http://www.cnblogs.com/lixiaohui-ambition/archive/2012/08/21/2649052.html

除此之外還有__FUNCTION__宏