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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013139008/article/details/79501489

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");这种没有可变参数的调用。


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

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

猜你喜欢

转载自blog.csdn.net/u013139008/article/details/79501489