关于linux中DBG调试宏的使用总结,减少代码冗余

/*
三个点 ...		(C语言变参)
如果是是形参里面出现,表示的是可变参数,即表示的传入的参数个数是可变,传多少个参数都被放到一个数组里面
C语言预处理器定义的一些宏 :
__LINE__  		当时行号(预处理器正在执行的那一时刻),十进制数 
__FUNCTION__ 	当时函数,字符串
__FILE__		当时文件,字符串
__DATE__		当时日期,字符串 
__TIME__		当时时间,字符串
 __VA_ARGS__ 	指打印宏里面的可变参数,也就是函数参数里面的...
*/
#define DEBUG

#ifdef DEBUG
#define DBG(...) 	fprintf(stderr, " DBG(%s, %s(), %d): ", __FILE__, __FUNCTION__, __LINE__); fprintf(stderr, __VA_ARGS__)
#else
#define DBG(...)
#endif

int main(void)
{
	DBG("tiaoshi.\n");
	
	return 0;
}

/*
内核中的DEBUG宏
#ifdef DEBUG_S3C_MEM
#define DEBUG(fmt, args…) printk(fmt, ##args)
#else
#define DEBUG(fmt, args…) do {} while (0)
#endif

args…其实代表可变参数的意思,参数可以是零个,例如在使用时,可以如一下方式:
#define PRINT_DEBUG(fmt,args…) do{ if(a>b) {printf(fmt,##args); } }while(0)

PRINT_DEBUG(“hello word\n”);
PRINT_DEBUG("%s\n",“hello word”);
PRINT_DEBUG("%s %s\n",“hello”," word");

为何是“#define debug(fmt,args…) printf (fmt ,##args)”这种宏定义方式呢?
<1> #define debug(fmt,args) printf (fmt ,##args)
  当不定参数多于1个,会提示参数多于agrs对应的参数

<2> #define debug(fmt,…) printf (fmt ,##args)
  这种情况agrs找不到对应项

<3> #define debug(fmt,…) printf (fmt ,…)
  这种情况下,不定参数在预编译时全部被替换成“…”

<4> #define debug(fmt,args…) printf (fmt ,args)
   我测试了,也是可以的

<5> #define debug(fmt,args) printf (fmt ,##args)
   u-boot使用的方法

*/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值