Я пытаюсь написать вариацию Printf, где элемент печатаемый и формат печатаемые являются смежными параметры в вызове, как ...vprintf не потребляя вещь va_list
print(2, "%s", "hello", "%.5u", 25);
Я изучал на вар арг и придумал ....
void print(int count, ...)
{
va_list varg;
va_start(varg, count);
while(count-- > 0)
{
char* format = va_arg(varg, char*);
vprintf(format, varg);
}
va_end(varg);
}
оказывается, что vprintf не потребляя предмет, который он использует из стека. Мой выход
hellohello
Я считаю, что это расширяется слишком
printf("%s", "hello);
printf("hello");
Так что я делаю неправильно, что vprintf не потребляя «привет» из списка агд?
Update: в комментарии ниже
void print(int count, ...)
{
va_list varg;
va_start(varg, count);
while(count-- > 0)
{
char* format = va_arg(varg, char*);
void* arg = va_arg(varg, void*);
printf(format, arg);
}
va_end(varg);
}
Это, кажется, чтобы получить работу.
Я бы не рассчитывал на то, что работает на всех системах, поскольку тип, предоставляемый va_arg, должен быть фактическим типом аргумента. Цитируя стандарт: «Если фактический следующий аргумент отсутствует, или если тип несовместим с типом фактического следующего аргумента (в соответствии с продвижением по умолчанию), поведение не определено».Предусмотрены два исключения: void * и char * являются взаимозаменяемыми; и беззнаковые и подписанные типы взаимозаменяемы, если значение положительное. – rici