printf 打印 文件名 函数名 行号

来源:互联网 发布:淘宝联盟怎么生成链接 编辑:程序博客网 时间:2024/04/25 22:40

输出源文件的标题,目前执行行的行数,编译的日期,编译的时间。

Linux下实现

#include <stdio.h> 

int main()

{

    printf("当前代码行:%d\n", __LINE__); 

    printf("当前源代码文件名:%s\n", __FILE__); 

    printf("当前文件编译的日期%s\n", __DATE__); 

    printf("当前文件编译的时间%s\n", __TIME__); 

    return 0;

}



Windows下实现

#include <stdio.h> 

int main()

{

    printf("当前代码的行数:%d\n", __LINE__);

     printf("当前源文件的文件名:%s\n", __FILE__);

     printf("当前源文件的编译日期:%s\n", __DATE__);

     printf("当前源文件的编译时间:%s\n", __TIME__);

     printf("当前源文件的编译的具体时间:%s\n", __TIMESTAMP__);

     return 0;

}

上面用Linux和Windows两种环境进行了测试,他们的函数还是有区别的,例如Wingdows下有 __TIMESTAMP__这个变量,而Linux下没有。还有__FILE__这个变量在Linux下的运行结果直接是文件名,而Windows下这个变量的结果为其具体的路径。

以上的这两个例子我觉得主要运用在对源文件的调试中,如果用户的程序在执行过程中出错,可以将这些出错信息通过E-mail发送给程序员,程序员能够迅速的定位代码的出错位置。

使用宏

__FILE__               文件名

__LINE__               行号

__FUNCTION__      函数名

即可。


#define debug_msg(fmt,...) printf("%s[%d]:"fmt,__FILE__,__LINE__,##__VA_ARGS__)

#define printf_my(fmt, ...) printf("%s %s %s %s %d:"fmt, __FILE__, __FUNCTION__, __DATE__, __TIME__, __LINE__, ##__VA_ARGS__)


int printf_my(const char *fmt, ...)

{

    #ifdef DEBUG

printf("%s %s %s %s %d:"fmt, __FILE__, __FUNCTION__, __DATE__, __TIME__, __LINE__, ##__VA_ARGS__)

#endif

}

#include "stdarg.h"
int my_printf (const char *format, ...)
{
 va_list arg;
 int done;
 
 va_start (arg, format);
 done = vprintf (format, arg); 
 va_end (arg);
 return done;
}

//引用头文件

debug.h

#ifndef __DEBUG__H_

#define __DEBUG__H_



#include <stdio.h>


#define DEBUG


#ifdef DEBUG

#define printf_debug(fmt, ...) printf("%s %s %s %s %d:"fmt, __FILE__, 

__FUNCTION__, __DATE__, __TIME__, __LINE__, ##__VA_ARGS__)

#else

#define printf_debug(fmt, ...)

#endif




#endif



0 0
原创粉丝点击