如果你使用va_list将args从可变参数函数传递给另一个函数,你如何调用va_start(没有错误)

时间:2014-11-07 00:27:49

标签: c++

我在这里看到了关于如何将可变参数从一个函数传递到另一个函数的问题的答案,即使用va_list传递给第二个函数。太棒了,当我尝试这个时,va_start不喜欢传入的传入的va_list ...

void foo(const char *str, va_list args) {
  va_start(args, str);
  //do something
  va_end(args);
}

void foo(const char *str, ...) {
  va_list args;
  foo(str, args);
}

我从g ++中得到了这个错误:

error: ‘va_start’ used in function with fixed args

2 个答案:

答案 0 :(得分:3)

您需要在可变参数函数中调用va_startva_end

相同
void foo (const char * str, va_list args )
{
    /* ... */
}

void foo (const char * str, ... )
{
    va_list args;

    va_start( args, str );
    foo( str, args );
    va_end( args );
}

答案 1 :(得分:1)

此代码导致未定义的行为,因为您在args中使用了foo未初始化。正确的方法是:

void foo(const char *str, va_list args) {
  //do something
}

void foo(const char *str, ...) {
  va_list args;
  va_start(args, str);
  foo(str, args);
  va_end(args);
}