1、问题
看到代码宏里面很多##__VA_ARGS__不知道什么意思
2、直接写测试代码
#include <stdio.h>
#define my_printf(x) printf(#x" is %d\n", x)
#define my_printf1(x) printf("value is %d\n", x##x)
#define my_printf2(...) printf(__VA_ARGS__)
#define my_printf3(fmt, ...) printf(fmt, __VA_ARGS__)
#define my_printf4(fmt, ...) printf(fmt, ##__VA_ARGS__)
int main()
{
int a = 100;
my_printf(a);
int aa = 50;
my_printf1(a);
my_printf2("a is %d\n", a);
my_printf3("aa is %d\n", aa);
my_printf4("I am chenyu \n");
my_printf4("a is %d\n", a);
return 0;
}
运行结果
a is 100
value is 50
a is 100
aa is 50
I am chenyu
a is 100
3 分析#和##和__VA_ARGS__和##__VA_ARGS__
1) #
宏连接符,作变量链接
my_printf1方法x##x,因为我们传进去的是a,然后进行链接a,就是aa,恰好我们定义了aa,所以my_printf1方法打印50