[C] Передать переменный список параметров из функции в функцию
more /usr/src/lib/libc/gen/err.c
more /usr/src/lib/libc/stdio/printf.c
---
"Аллах не ведёт людей неверных."
А если словами, а не сцылкой?
Может, кто сам помнит, как это делается?
Если нет, то поясни плиз.
Я не знаю исходной постановки задачи, в зависимости от неё,
я бы посмотрел на опыт написания всяких там printf/scanf/err/exec,
но лучше сделать списки, записи или что-нибудь такое.
---
...Я работаю антинаучным аферистом...
начни с этого. вот кусок моего кода:
void message__(const char *file, int pos, int flags, const char *fmt, ...)
{
va_list ap;
char log_string[LOG_STRING_MAX_LEN];
va_start(ap, fmt);
vsnprintf(log_string, LOG_STRING_MAX_LEN, fmt, ap);
...
printf("%s", log_string);
...
}
Па любэ это не то. Ты тут нигде не передаешь из одной функции с переменным числом параметров параметры в другую функцию с переменным числом параметров.
Вообще автору треда читать stdarg(3).
va_list ap;
...
va_start(ap, fmt);
vsnprintf(log_string, LOG_STRING_MAX_LEN, fmt, ap);
Чем это похоже на то, что, как я понимаю, хочет автор, скажем, передать в одну функциюю переменное число интов и распечатать их:
void my_function(int count, ...)
{
std::string format;
for (int i = 0; i < count; i++)
format += "%d\n";
printf(format, ...);
}
где printf(format, ...) означает передать в printf format и все остальные нефиксированные аргументы.
Ты гонишь.Поясняй.
Чем это похоже на тоТем, что это работает так же. Нужный результат достигается без особенных ограничений.
Или тебе обязательно нужно магическое троеточие ?
Ты первый топик в теме читал?
И еще. Как ты реализуешь написанный мною выше пример, если у тебя нет похожей на printf функции, принимающий переменную va_list в качестве параметров?
Тогда никак. Менять язык или убивать себя апстену.
забить стек параметрами (в цикле) и сделать переход на функцию
Вместо меня подискутировал .
Па любэ это не то.
Это как раз именно то, тут тебе уже сказали что надо читать stdarg(3).
![](/images/graemlins/wink.gif)
Тебе можно вручную пройтись по всем параметрам, у мне же просто повезло больше, есть vsnprintf. Кстати, в упомянутом мане есть пример кода.
![](/images/graemlins/laugh.gif)
Это как раз именно то, тут тебе уже сказали что надо читать stdarg(3).Во-первых, это не мне сказали.
А во-вторых, чуве - сделай мне через это пример, который я описал вышел. Ага, давай, сделай.
Странно, что я его пропустил при чтении мана.
![](/images/graemlins/smile.gif)
Оставить комментарий
sevast82
Крайне редко писал функции с переменным списком параметров, поэтому возник вопрос:Есть функция f, которая принимает переменный список параметров. Из неё вызывается функция g, тоже принимающая переменный список параметров.
Как передать g тот же список аргументов, который получает f ?
И, возможно, добавить в начало списка аргументов для g дополнительные аргументы?