Предположим, что у меня есть функция, которая принимает вариативные аргументы (...
) или va_list
, переданные из другой такой функции. Основная логика заключается в самой этой функции (назовем ее f1
), но я хочу, чтобы она передала va_list
другой функции (назовем ее f2
), которая определит следующий тип аргумента, получит ее с помощью va_arg
и правильно преобразует и сохраните его для использования вызывающим абонентом.Пропустить va_list или указатель на va_list?
Достаточно ли передать va_list в f2
или необходимо передать указатель на va_list. Если va_list не требуется, чтобы быть типом массива или хранить его данные позиции в том месте, на котором объект va_list
указывает (а не на сам объект), я не вижу, как передача его по значению может позволить вызывающую функцию (f1
) «видеть» изменения вызванной функции, сделанные va_arg
.
Может ли кто-нибудь пролить свет на это? Меня интересует то, что требует стандарт, а не то, что позволяет определенная реализация.
Согласовано с последним правлением - указатель - это путь (поскольку OP хочет, чтобы изменения в 'va_list' были определенно видны в вызывающей функции). – caf
@caf: Я не думаю, что вы должны были отредактировать мою ссылку на 'vfprintf()', потому что похоже, что другие совершают ту же ошибку, что и я, и предлагают испытуемому взглянуть на существующие прототипы (что на самом деле не ответить на его вопрос). – JeremyP
Я бы сказал, оставить комментарий и/или проголосовать за них тогда - кажется, лучше иметь правильный ответ, который не был бы запутан с более ранним, неправильным допущением ... – caf