变量参数功能,将值传递给另一个函数

时间:2014-04-29 17:15:34

标签: c++ c

我有一个带有一些变量参数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函数接收的椭圆传递变量参数。感谢

3 个答案:

答案 0 :(得分:3)

不可能以通常的方式传递它们,唯一可能的是将变量参数转发给接受va_list的函数。将参数转发到vprintfva_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;
}