但是在上面的例子中,编译器仍存在问题,因为宏被展开后,里面的字符串后面会多一个逗号,
为了解决这个逗号,问题,CPP提供一个特殊的##操作,其格式为:
#define LOG(format, ...)...并且可以发现printf的实现为什么一定需要%s,%d等这种格式化字符串是为了给va_*宏两点关键信息:1.可变参数的个数(百分号的个数);2.可变参数的类型(%s,%d等)
不过C++作为扩展C,当然克服了这些限制...于是C++提供了可变参数模板
C++可变参数
C++的可变参数模板是怎么做到不需要告诉参数个数的呢?...newPrint(int, int, const char*)
第二步:
在打印第1个参数1后,newPrint递归调用了自己,传递的参数为arg_left.......);
}
}
int main(int argc, char** argv)
{
newPrint(1,22,"wow");
}
参考文档
C++的可变参数模板
C/C++可变参数,