关于DEBUG调试用的宏定义

在开发中我们常常需要对数据进行打印操作,这样我们才能更好的进行开发交互,进而合理开发和优化程序。

如果我们将一些输出语句直接写在程序里,在我们最后打包的时候会有许多脏数据,特别像iOS,如果想放到AppStore上去,就必须把所有输出语句删除,不然审核不会不通过,提示您的程序是调试程序。

如果我们在宏定义里对宏进行判断的话,这样就会省去很多麻烦。如:

#ifdef DEBUG

#define DDDebugLog(fmt, ...) NSLog((@"%s [Line %d]\n" fmt @"\n\n\n"), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)

#else

#define DDDebugLog(...)

#endif

在上述宏定义中,如果DEBUG被定义了,那么就会执行上面的define定义,如果不是DEBUG那么就会执行下面的define定义。这样,在代码中只要判断是不是debug就可以了,方便操作,一次性解决调试与打包两种状态下的程序。


#define DDDebugLog(fmt, ...) NSLog((@"%s [Line %d]\n" fmt @"\n\n\n"), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)

__VA_ARGS__ 是一个可变参数的宏(gcc支持)。实现思想就是宏定义中参数列表的最后一个参数为省略号(也就是三个点)。这样预定义宏_ _VA_ARGS_ _就可以被用在替换部分中,替换省略号所代表的字符串。加##用来支持0个可变参数的情况。 

测试代码: 
#include<stdio.h> 
#define PRINT_DBG(debug, ...)\ 
{\ 
    if(debug) {\ 
    fprintf(stderr, "%s %s [%d]: ", __FILE__, __FUNCTION__, __LINE__);\ 
    fprintf(stderr, __VA_ARGS__);\ 
    }\ 

#define MACRO(s, ...) printf(s, ##__VA_ARGS__) 


int main() 

int i =100; 
PRINT_DBG(1,"hello\n"); 
PRINT_DBG(1,"world, %d\n",i); 
MACRO("hello, world\n"); //这里没有可变参数, 所以要用##__VA_ARGS__ 
MACRO("hello, %s\n", "fanrey"); 
return 0; 


编译
:gcc -o vaargs vaargs.c 

运行: ./vaargs 


vaargs.c main [16]: hello 
vaargs.c main [17]: world, 100 
hello, world 
hello, fanrey 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值