Для передачи замещающих знаков необходимо преобразовать их в va_list и использование что va_list во второй функции. Конкретно;
void format_string(char *fmt,va_list argptr, char *formatted_string);
void debug_print(int dbg_lvl, char *fmt, ...)
{
char formatted_string[MAX_FMT_SIZE];
va_list argptr;
va_start(argptr,fmt);
format_string(fmt, argptr, formatted_string);
va_end(argptr);
fprintf(stdout, "%s",formatted_string);
}
Нет никакого способа звонить (например), printf, не зная, сколько аргументов Вы являетесь передающими к нему, если Вы не хотите войти в непослушные и непортативные приемы.
обычно используемое решение состоит в том, чтобы всегда обеспечивать альтернативную форму функций vararg, таким образом printf
имеет vprintf
, который берет va_list
вместо ...
. Эти ...
версии являются просто обертками вокруг эти va_list
версии.