用DEBUG宏代替printf

       很多时候,在写代码的时候会使用到printf函数打印调试信息,比较大一些的项目调试写的printf会很多,一旦需要生成 Release发布版本,需要把所有的调试信息注释,即把用printf的代码行注释或者删除,这个过程会很繁琐其容易漏删除printf。

 

#if 1
#define MY_DEBUG(...)	printf(__VA_ARGS__)
#else
#define MY_DEBUG(...)      
#endif

 

__FILE__               代码所在文件名

__LINE__               代码所在行号

__FUNCTION__     代码所在函数名

__DATE__              代码编译的日期

__TIME__               代码编译的时间

__TIMESTAMP__    代码编译的具体时间

  printf("sudaroot\r\n");
  printf("File name:             %s\r\n", __FILE__ );
  printf("Code line:             %d\r\n", __LINE__ );
  printf("Function name:         %s\r\n", __FUNCTION__);
  printf("Build date:            %s\r\n", __DATE__);
  printf("Build time:            %s\r\n", __TIME__);
  printf("Build specific time:   %s\r\n", __TIMESTAMP__);

编译日期和时间可以做软件版本号,这样你每次编译的时候就无需担心软件版本号有没有手动修正;

如果你想打印的时候打印出代码的所在文件和代码行号及函数名可以使用下面的,或者自定义修改。

#if 1
#define MY_DEBUG(fmt, ...)	printf("%s, %d, %s "fmt, __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__)
#else
#define MY_DEBUG(...)      
#endif

##__VA_ARGS__说明:

1、__VA_ARGS__ 是C99新增的一个可变参数的宏,和(...)一样的效果。

2、##是字符串连接符,比如字符串A = {hello } 和 B = {sudaroot\r\n} ,那么A##B = {hello sudaroot\r\n};

3、##__VA_ARGS__组合起来就是防止__VA_ARGS__为空是导致编译器报错。具体详情百度,或者我有空会写一下。

 

 

全篇完。

本人博客仅仅代表我个人见解方便记录成长笔记。

若有与 看官老爷见解有冲突,我坚信看官老爷见解是对的,我的是错的。

感谢~!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值