我有一个带有一些变量参数params的函数,我需要在其中调用另一个传递这个参数的函数。 例如,某人调用此函数:
bool A(const char* format, ...)
{
//some work here...
bool res = B(format, /*other params*/);
return res;
}
bool B(const char* format, /**/, ...)
{
va_list arg;
va_start(arg, format);
//other work here...
}
我需要知道,如何通过A到B函数接收的椭圆传递变量参数。感谢
答案 0 :(得分:3)
不可能以通常的方式传递它们,唯一可能的是将变量参数转发给接受va_list
的函数。将参数转发到vprintf
(va_list
printf
版)的示例:
int printf(const char * restrict format, ...) {
va_list arg;
va_start(arg, format);
int ret = vprintf(format, arg);
va_end(args);
return ret;
}
答案 1 :(得分:3)
您无法直接执行此操作,因此您需要遵循C库与fprintf
/ vfprintf
个功能组相同的模式。
我们的想法是将实现放入v
- 前缀函数中,并使用面向用户的函数,不带v
前缀来"展开"在调用真实实现之前va_list
。
bool A(const char* format, ...)
{
//some work here...
va_list arg;
va_start(arg, format);
bool res = vB(format, arg);
va_end(arg);
return res;
}
bool B(const char* format, /**/, ...)
{
va_list arg;
va_start(arg, format);
bool res = vB(format, arg);
va_end(arg);
return res;
}
bool vB(const char* format, va_list arg) {
// real work here...
}
答案 2 :(得分:2)
你去了:
bool A(const char* format,...)
{
bool res;
va_list args;
va_start(args,format);
res = B(format,args);
va_end(args);
return res;
}