如何实现一个打印LOG函数的宏,可以打印所在函数行号等信息

实现这个LOG宏需要了解几个系统宏
_ FILE _以字符串形式返回所在文件名称
_ func _以字符串形式返回所在函数名称
_ LINE _以整数形式返回所在行号
还有变参宏的使用

每次都用printf来打印信息,参数会一直重复,太过繁琐,可以用一个宏来封装printf,只需要写入需要输出还要输出的信息即可,必须要输出的直接封装好,这就是log的目的。

同时##的作用是将变量连接在一起,比如
int abc =4,def = 5;
int abcdef = 0;
#define contact(a,b) a##b

contact(abc,def) = 1;

printf(“%d”,abcdef);

输出结果为1;

可见这里的##有将变量名连接在一起的功能。

#include<stdio.h>

#define log(frm,args...) {\
      printf("[%s : %s : %d]",_ _FILE_ _,_ _func_ _,_ _LINE_ _);\
      printf(frm,##args);\后面参数和连接在一起,该宏只有一个变量时也不会报错
      printf(“\n”);\
      }

int main()
{
    int a = 5;
    log(%d”,a);
    log(“hello word!);
}

我们在调试时可以有log宏输出,一旦调试完毕,需要提交代码就不能再有log输出了,如果项目很大,那么我们要一个一个去找?
这肯定是不行的,不符合程序员的方式。
那么有什么办法呢?
很简单,条件编译。

#include<stdio.h>

#if  DEBUG
#define log(frm,args...) {\
        printf("[%s : %s : %d]",_ _FILE_ _,_ _func_ _,_ _LINE_ _);\ 
        printf(frm,##args);\后面参数和连接在一起,该宏只有一个变量时也不会报错   
        printf(“\n”);\     
 }
 #else
 #define log(frm,args)
 #endif
 
 int main()
 {    
      int a = 5;    
      log(%d”,a);    
      log(“hello word!);
 }

当我们需要输出log打印时只需要在程序前面定义一个DEBUG宏,或者在编译源程序时,

gcc -D xxx.c

就会在程序前面自动添加一个DEBUG宏

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值