[P&AM Lab] crypti printf questions
Grigoriy A. Sitkarev
sitkarev на komitex.ru
Пн Апр 15 21:59:43 MSK 2013
Всем здоровья!
lonely.ruyk wrote:
> Небольшой вопрос по поводу va_list:
> Сейчас интерфейс функции форматированного вывода выглядит так:
>
> int var_print_formatted(struct variable *fmt, struct variable **args,
> int nargs);
>
> хотелось бы сделать чтобы она выглядела как то так
>
> int var_print_formatted(struct variable *fmt, va_list ap);
> или так
> int var_print_formatted(struct variable *fmt, ...);
>
Я думаю, что тебе не совсем понятно, откуда вообще взялся va_list и
сопровождающие его макросы va_start(), va_end(), va_copy() и va_arg().
Они появились для того, чтобы обеспечить переносимость Си функций,
принимающих переменное количество аргументов, с одной машины на другую,
без привязок к особенностям ABI.
В твоём случае мы имеем дело с интерпретатором, где сами переменные и
аргументы при вызове функций хранятся некоторым образом в его состоянии
времени выполнения. Сам интерпретатор может полностью контроллировать
сколько значений было передано функции при вызове, поэтому необходимости
в va_list для передачи аргументов никакой нет.
Чем плох нынешний вариант с передачей аргументов в массиве? В конце
концов, кто запрещает сделать структуру
struct arg_list {
const struct variable **item;
int nitems;
int nalloc;
};
int var_print_formatted(const struct variable *fmt, const struct
arg_list *args);
--
Г.А.
Подробная информация о списке рассылки Lab