LINUX.ORG.RU

va_list


0

0

Естъ следующая функция в однои сишнои либе
int DDC_CreateChannelPropertyV (DDCChannelHandle,const char*,DDCDataType ,va_list args);

Последнии аргумент может бытъ строкои или числом в зависимости от
DDCDataType , толъко непонятно как его передаватъ .
В таких случаях исполъзуют обычно ellipse(...) а va_list для разбора
аргументов .
Проясните ситуацию .

anonymous

Корень зла в том что в Си нельзя динамически сформировать набор аргументов.

есть такие функции -- vprintf, vsprintf.. -- они тоже принимают va_list.

Это сделано для того чтобы тот кто их вызывает мог сам передать динамический (для себя динамический) набор аргументов.

Например ты можешь вызвать функцию F(x, ...) только если сам имеешь фиксированное кол-во аргументов. А если их у тебя уже динамическое число?

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

>только если сам имеешь фиксированное кол-во аргументов. А если их у тебя уже динамическое число?

передать фиксированное число указателей на "динамические" аргументы?

ale ★★
()
Ответ на: комментарий от ale

ну да.

речь о том как удобно и быстро передать то что тебе самому передали как ... дальше.

dilmah ★★★★★
()

Что-то мне подсказывает, что должна быть в библиотеке
такая же функция, но с аргументом не "va_list" а просто "...".
Она могла бы называться DDC_CreateChannelProperty().

Если таковой нет то простая обертка поможет, что-то в стиле
(не тестировал):

int DDC_CreateChannelPropertyV_wrapper(DDCDataType t, ...)
{
    int rc;

    va_list ap;
    va_start(ap, t);
    rc = DDC_CreateChannelPropertyV_wrapper(t, ap);
    va_end(ap);
	
    return rc;
}

HTH

P.S. man va_start

Onanim
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.