码迷,mamicode.com
首页 > 编程语言 > 详细

Duanxx的C++学习: 使用__FILE__,__LINE__,__VA_ARGS__调试代码

时间:2014-11-01 09:49:09      阅读:296      评论:0      收藏:0      [点我收藏+]

标签:__file__   __line__   __va_args__   

 __FILE__,__LINE__


在调试C/C++代码的时候,我们最想知道的,当然是程序当前走到了哪个文件的第几行了,这里有两个宏:__FILE__和__LINE__,返回的是当前文件的路径,和当前行。

 

这里测试代码如下:

#include <cstdio>

int main()
{
  printf("%s : %d",__FILE__,__LINE__);
  printf("\n");

  return 0;
}


Windows下运行结果为:


bubuko.com,布布扣




Linux系统运行结果如下:

bubuko.com,布布扣



         可以看到,在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下的运行结果:

bubuko.com,布布扣


Linux下的运行结果:


bubuko.com,布布扣






一行调试宏

有了上面的说明,就可以写出下面的调试宏:

#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下结果:

bubuko.com,布布扣




Linux下的结果:

bubuko.com,布布扣



Duanxx的C++学习: 使用__FILE__,__LINE__,__VA_ARGS__调试代码

标签:__file__   __line__   __va_args__   

原文地址:http://blog.csdn.net/daunxx/article/details/40662771

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!