C文件中debug函数及宏中##的使用

1.redis-3.0\src\redis.h

#define redisDebug(fmt, ...) \
    printf("DEBUG %s:%d > " fmt "\n", __FILE__, __LINE__, __VA_ARGS__)
#define redisDebugMark() \
    printf("-- MARK %s:%d --\n", __FILE__, __LINE__)

2.

#ifdef DEBUG
#define printf(fmt, args...) printf(fmt, ##args)
#else
#define printf(fmt, args...)

3.

#define debug(format, args...) fprintf(stderr, format, ##args)
#define debug(format, args...) fprintf(stderr, format, args)

使用:macro.c

#include <stdio.h>
 
#define debug(format, args...) fprintf(stderr, format, args)
 
int main(void) {
    debug("%s", "hello\n");
    debug("world\n");
    return 0;
}

gcc编译上述代码,编译结果如下:


说明:如果使用args,而不是##args,debug宏不接受debug("world\n");这种没有可变参数的调用。


在网上搜这种情况下##的作用,有一种解释是:这里的##起到把前面多余的","去掉的作用

没有理解这句话的意思,有哪位大虾理解,可以留言哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值