#指示该参数被双引号替代
@指示该参数被单引号替代
##指示粘结(其实就是连接)
可变宏 ...和_ _VA_ARGS_ _
实现思想就是宏定义中参数列表的最后一个参数为省略号(也就是三个点)。这样预定义宏_ _VA_ARGS_ _就可以被用在替换部分中,以表示省略号代表什么。比如:
#define PR(...) printf(_ _VA_ARGS_ _)
PR("hello");-->printf("hello");
PR("weight = %d, shipping = $.2f",wt,sp);
-->printf("weight = %d, shipping = $.2f",wt,sp);
省略号只能代替最后面的宏参数。
#define W(x,...,y)错误!
例子:
宏定义扩展后为:
print("Message " "1" ": " "x = %g/n", x);
也即;
print("Message 1: x = %g/n", x);
所以程序的输出结果为:
Message 1: x = 48
Message 2: x = 48.00, y = 6.9282