Цитата(FormatCft @ Jan 24 2009, 16:21)

Правильно ли я делаю?
Нет. Задача в общем виде решаема только через дополнительную функцию:
Код
void f_one_body(char * format, va_list args);
void f_one(char * format, ...)
{
va_list args;
va_start (args, format);
f_one_body (format, args);
va_end (args);
}
void f_two(char * format, ...);
{
va_list args;
va_start (args, format);
f_one_body (format, args);
va_end (args);
}
Происходит это от того, что в вашем варианте f_two должна передать в f_one стековый фрейм, размер которого ей не известнен. Наверное, если в вашем компиляторе фрейм передается по указателю, можно как-то извернуться и передать в f_one указатель на стековый фрейм, переданный f_two. Но компилятор при вызове f_one будет пытаться сформировать стековый фрейм с этим указателем в виде содержимого, как того требует прототип функции. Значит надо будет заводить указатель на фиктивную функцию с параметром в виде указателя на стековый фрейм и вызывать f_one через этот указатель с явным приведением к типу f_one... Короче - мороки много и скорее всего будет непереносимо.