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