printf 打印 文件名 函数名 行号

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

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



  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值