Переменное число параметров

  • Автор темы Rumzy
  • Дата начала
Статус
Закрыто для дальнейших ответов.
R

Rumzy

Привет!

Столкунулся со следующей проблеммой. Для функции с переменным числом параметров нужно написать wrapper.
Код:
int func(int i, char* format, ...);

int wrapper_func(int i, char* format, ...)
{
// do something

return func(i, format, ...); // ??
}

Как передать переменное число параметров в "оборачиваемую" функцию?

ЗЫ i - просто переменная типа int. Это не количество параметров.
 
N

Normann

Никак. Либо передаешь адрес либо число и копируешь.
 
R

Rumzy

Задача состоит как-раз в том, чтоб не менять интерфейс базовой функции. Но похоже общий случай таки невозможно решить с помощью средств С/С++.
 
E

European

Для обработки переменного числа параметров используются макросы:
va_alist - Name of parameter to called function (UNIX version only)
va_arg - Macro to retrieve current argument
va_dcl - Declaration of va_alist (UNIX version only)
va_end - Macro to reset arg_ptr
va_list - typedef for pointer to list of arguments defined in STDIO.H
va_start - Macro to set arg_ptr to beginning of list of optional arguments (UNIX version only)
Но как решить твою задачу сходу я и не соображу
 
N

Normann

Нет, всетаки можно - через глобальную переменную

Даже еще вот способ - у тебя же переменное число аргументов, вот и передавай в них адрес, а функция будет интерпретировать один из аргументов как адрес в зависимости от различных критериев которые можно придумать целую кучу.
 
E

European

Normann, насколько я понял условие, функция func должна остаться неизменна, тогда ни глобальные переменные, ни передача адреса положение не изменят..


Rumzy, надеюсь func это не printf?
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!