【发布时间】:2010-09-07 16:05:48
【问题描述】:
我希望在 C/C++ 中执行此操作。
我遇到了Variable Length Arguments,但这表明使用libffi 的Python 和C 解决方案。
现在,如果我想用myprintf 包装printf 函数
我的做法如下:
void myprintf(char* fmt, ...)
{
va_list args;
va_start(args,fmt);
printf(fmt,args);
va_end(args);
}
int _tmain(int argc, _TCHAR* argv[])
{
int a = 9;
int b = 10;
char v = 'C';
myprintf("This is a number: %d and \nthis is a character: %c and \n another number: %d\n",a, v, b);
return 0;
}
但结果并不如预期!
This is a number: 1244780 and
this is a character: h and
another number: 29953463
我错过了什么地方??
【问题讨论】:
-
现在 C++11 出来了,这个问题的答案非常不同了。
-
@MooingDuck 确实,我添加了一个
Variadic templates答案,您认为C++11 中有更好的方法吗? -
@MooingDuck 可变参数函数不是可变参数模板函数。它们的性质和类型不同。
-
@rubenvb 在这种情况下,我认为区别并不重要,我看到的几乎所有参考文献都将它们吹捧为可变参数函数的直接替代品:en.cppreference.com/w/cpp/utility/variadic 所以我很想了解区别你在这种情况下看到。
-
@shafik:每个实例化的明显代码膨胀怎么样?传递函数指针怎么样?您需要注意一些区别。我并不是说你不应该,我只是说没有人弃用可变参数函数。
标签: c++ c variadic-functions