[P&AM Lab] crypti printf questions

Борис Липин lonely.ruyk на mail.ru
Вт Апр 16 10:43:11 MSK 2013


Я подумал что с такой интерфейс выглядит более стандартным и каноничным.
В конечном итоге ведь и printf(3) функции могли реализовать как то вроде:
printf(char *fmt, void *args, int nargs).
Спасибо за ответ, наверное я действительно немного не прав относительно интерфейса функций.:)

А вообще есть возможность сделать преобразование array -> va_list или запихать массив в функции с переменным количеством параметров *стандартными средствами* или эта ситуация - совсем не то для чего они используются и о таких вопросах не стоит задумываться?


Понедельник, 15 апреля 2013, 21:59 +04:00 от "Grigoriy A. Sitkarev" <sitkarev на komitex.ru>:
>Всем здоровья!
>
>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 mailing list
>Lab на amplab.syktsu.ru
>http://amplab.syktsu.ru/cgi-bin/mailman/listinfo/lab

----------- следущая часть -----------
Вложение в формате HTML было извлечено&hellip;
URL: <http://amplab.syktsu.ru/pipermail/lab/attachments/20130416/396b0e3d/attachment.html>


Подробная информация о списке рассылки Lab