版权声明:本文为博主原创文章,未经博主允许不得转载。 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");这种没有可变参数的调用。
在网上搜这种情况下##的作用,有一种解释是:这里的##起到把前面多余的","去掉的作用
没有理解这句话的意思,有哪位大虾理解,可以留言哦~