编译器内置宏__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. //============================================================================
  8. #include
  9. #define DEBUG
  10. #ifdef DEBUG
  11. #define DEBUG(format,...) printf("File: "FILE", Line: %05d: "format"/n", LINE, ##VA_ARGS)
  12. #else
  13. #define DEBUG(format,...)
  14. #endif
  15. intmain() {
  16. charstr[]="Hello World";
  17. DEBUG("A ha, check me: %s",str);
  18. return0;
  19. }

测试结果:

编译器内置宏__LINE__&__FUNCTION__

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

除此之外还有__FUNCTION__宏
原文链接: https://www.cnblogs.com/embedded-linux/p/4783608.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/221561

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 上午11:20
下一篇 2023年2月13日 上午11:21

相关推荐