我在这里看到了关于如何将可变参数从一个函数传递到另一个函数的问题的答案,即使用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
答案 0 :(得分:3)
您需要在可变参数函数中调用va_start
。 va_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);
}