宏定义DEBUG()代替printf()

本文介绍了如何使用宏定义DEBUG来替代printf()函数,详细解释了宏中的fmt、#fmt和##args的作用。fmt作为宏定义的第一个参数,#fmt将其转换为字符串输出,##args用于处理可变参数列表,当没有参数时移除前导逗号。

今天看到这样一段代码,值摘取其中宏定义的部分,如下:

#define DEBUG(fmt,args...) printf("%s(%d)-%s -> " #fmt "\n", __FILE__, __LINE__, __FUNCTION__, ##args);


相信很多初入编程界的新人朋友们(我也是新人,汗。。。),看到这就会有疑问:

1.fmt及#fmt是什么?  2.##args是什么?


在此对这些问题做一个容易理解的解释:

1.fmt就是宏定义的第一个参数,在代码中展开时直接代入,需注意的是#fmt的意思为把fmt传进来的内容以字符串形式输出。

2.args..代表一个可变化的参数表,##args如果前面的可变参数被忽略或为空,“##”操作将使预处理器去除掉它前面的那个逗号。如果你在宏调用时,确实提供了一些可变参数,它会把这些可变参数放到逗号后面。


#include <stdio.h>
#include <stdlib.h>


#define DEBUG_PRINT(fmt,args...) printf("%s(%d)-%s -> " #fmt "\n", __FILE__, __LINE__, __FUNCTION__, ##args);


void main(void)
{
    char a = 'T', b = 'e', c = 's', d = 't';
    DEBUG_PRINT(%c%c%c%c,a,b,c,d);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值