输出源文件的标题,目前执行行的行数,编译的日期,编译的时间。
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