首页 > 代码库 > Duanxx的C++学习: 使用__FILE__,__LINE__,__VA_ARGS__调试代码
Duanxx的C++学习: 使用__FILE__,__LINE__,__VA_ARGS__调试代码
__FILE__,__LINE__
在调试C/C++代码的时候,我们最想知道的,当然是程序当前走到了哪个文件的第几行了,这里有两个宏:__FILE__和__LINE__,返回的是当前文件的路径,和当前行。
这里测试代码如下:
#include <cstdio> int main() { printf("%s : %d",__FILE__,__LINE__); printf("\n"); return 0; }
Windows下运行结果为:
Linux系统运行结果如下:
可以看到,在Windows下,__FILE__返回的是完整路径,而在Linux下使用g++编译,返回的只是文件名。
__VA_ARGS__
这个是从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__调试代码
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。