C语言--调试

首先来了解一下文件默认的输出信息的函数:

#include<stdio.h>

int main()
{
    printf("line : %d\n", __LINE__);            //当前行数
    printf("filename : %s\n", __FILE__);        //当前文件名
    printf("function : %s\n", __FUNCTION__);    //当前函数
    printf("time : %s\n", __TIME__);            //当前时间
    printf ("date : %s\n",  __DATE__);          //当前日期
    return 0; 
}
/*
输出:
line : 5
filename : C:\test3.cpp
function : main
time : 21:20:03
date : Dec  2 2017
*/
#ifdef DEBUG
//#define DPRINTF(fmt, args...) printf(fmt, ##args)
#define DPRINTF(fmt, args...) do { printf("%s\n%d\n", clean_filename(__FILE__), __LINE__); printf(fmt, ##args); } while(0)
#else
#define DPRINTF(fmt, args...)
#endif

其中cleam_finame((_FILE_)定义为

#ifdef DEBUG
static const char* clean_filename(const char* path)
{
    const char* filename = path + strlen(path); 
    while(filename > path)
    {
        if(*filename == '/' || *filename == '\\')
        {
            return filename + 1;
        }
        filename--;
    }
    return path;
}
#endif

作用是只输出文件名,而省略掉文件路径

关于#和##,请见另一篇文章c语言中#和##

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在项目开发工程中,如果能确定哪个文件下的哪个函数下的哪行出错--即锁定错误,那该多好啊,该文章就是为此而作的。 首...
    CooperNiu阅读 2,047评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,452评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,569评论 25 709
  • 近期再看c语言,感觉对oc的理解又更深了一层,但是因为实在命令提示符中来编写c代码,所以调试起来感觉很不方便,后来...
    一叶__知秋阅读 5,019评论 0 49
  • 早年间,军校的业余生活枯燥乏味。 没事就搞搞体育活动,围在一起唱唱革命歌曲,看看国际新闻。每周开会,内容无非是三大...
    是风月先生阅读 2,444评论 0 1