Если вы передаете аргументы из функции с переменным числом в другую функцию с помощью va_list, как вы вызываете va_start (без ошибки)

0

Я видел ответы здесь на вопросы о том, как передавать переменные аргументы от одной функции к другой, которые говорят, что 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 ответа

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);
}
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 );
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню