C语言--调试

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

#include

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语言中#和##

你可能感兴趣的:(C语言--调试)