编译器内置宏:
先介绍几个编译器内置的宏定义,这些宏定义不仅可以帮助我们完成跨平台的源码编写,灵活使用也可以巧妙地帮我们输出非常有用的调试信息。
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
- intmain() {
- charstr[]="Hello World";
- DEBUG("A ha, check me: %s",str);
- return0;
- }
测试结果:
转自: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
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!