标签:__file__ __line__ __va_args__
在调试C/C++代码的时候,我们最想知道的,当然是程序当前走到了哪个文件的第几行了,这里有两个宏:__FILE__和__LINE__,返回的是当前文件的路径,和当前行。
这里测试代码如下:
#include <cstdio> int main() { printf("%s : %d",__FILE__,__LINE__); printf("\n"); return 0; }
Windows下运行结果为:
Linux系统运行结果如下:
可以看到,在Windows下,__FILE__返回的是完整路径,而在Linux下使用g++编译,返回的只是文件名。
这个是从C99开始支持的可变参数宏,以前在C语言中,只支持函数的可变参数
比如我们最常见的printf函数:
void printf(const char* format, …);
这里的省略号…,就是可变参数。
而__VA_ARGS__这个宏就是实现了宏的可变参数:
#define debug(…) printf(__VA_ARGS__)
测试代码如下:
#include <cstdio> #define DEBUG(...) printf(__VA_ARGS__) int main() { DEBUG("duanxx %d\n",123); return 0; }
Windows下的运行结果:
Linux下的运行结果:
有了上面的说明,就可以写出下面的调试宏:
#define DEBUG(fmt, ...) fprintf(stdout, "%s:%d Duanxx Debug " fmt "\n", __FILE__, __LINE__, ##__VA_ARGS__)
测试代码:
#include <cstdio> #define DEBUG(fmt, ...) fprintf(stdout, "%s:%d Duanxx Debug " fmt "\n", __FILE__, __LINE__, ##__VA_ARGS__) int main() { DEBUG("duanxx %d\n",123); return 0; }
Windows下结果:
Linux下的结果:
Duanxx的C++学习: 使用__FILE__,__LINE__,__VA_ARGS__调试代码
标签:__file__ __line__ __va_args__
原文地址:http://blog.csdn.net/daunxx/article/details/40662771