LINUX.ORG.RU

Вызов функция с переменным кол-вом параметров!


0

0

Необходимо вызывать функцию с переменным кол-вом параметров. Кол-во параметров, тип и последовательность будет определяется текстовой строкой вида «%s1 %c1 %d1 %f1 %d2».

Т.к. таких вариаций вызова будет много, параметры должны подставляться на ходу на ходу.

C/С++


Самому приходит на ум решения использывать asm вставку:
push
push
push
call

Но может С тоже может с этим справится?

T-34 ()
Ответ на: комментарий от VladimirMalyk

Для написания своей функции с переменным кол-вом параметров, есть макросы va_list. Может подобный макросы существуют для формирования списка аргументов для вызова таких функций.

По указателю скажем.

T-34 ()
Ответ на: комментарий от T-34

Так задавать вопрос надо нормально, в языке такого нет. В качестве переносимого решения в первую очередь вспоминается libffi.

Begemoth ★★★★★ ()
Ответ на: комментарий от T-34

> Видя такое понимаю что не все поняли вопрос.

T-34


Чувак, ты точно в танке!

LamerOk ★★★★★ ()

голосую за void*

может алгоритм другой придумаешь или язык подберёшь?

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

> Ему нужен механизм optional параметров, либо список, в котором можно мешать типы.

Он еще не в курсе, что и va_list его устраивает на все 100%.

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

Спасибо! Отличные ссылки, то что нужно! Единственный вменяемый ответ!

P.S: Жаль что на ЛОР рейтинг зависит от кол-во постов, а не от их эффективности ответов.


T-34 ()
Ответ на: комментарий от t184256

>Необходимо вызывать функцию с переменным кол-вом параметров.

T-34 ()
Ответ на: комментарий от balodja

>> Ему нужен механизм optional параметров, либо список, в котором можно мешать типы.

Он еще не в курсе, что и va_list его устраивает на все 100%.

Тоже хотел написать, что он плохо va_list вкурил. Но если ему понравился ответ про карринг, то я не уверен, что кто-то кроме tia смог распарсить его вопрос.

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

У этого митька есть функция типа void Func(const char* fmt,...), и ему нужно вызывать её в рантайме, причем аргументы задаются по командам голосов в голове,строкам в конфиге и т.п.

anonymous ()
Ответ на: комментарий от Begemoth

Когда человек не знает, чего хочет, он выбирает «правильный» ответ из эстетических соображений.

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

> У этого митька есть функция типа void Func(const char* fmt,...), и ему нужно вызывать её в рантайме, причем аргументы задаются по командам голосов в голове,строкам в конфиге и т.п.

До меня дошло все таки, после вдумчивого перечитывания второго поста (не считая стартового). Без извратов, такое не реализовать. Но все равно не врубился, чем понравился ответ про карринг.

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

Мне кажется, что он просто не понял, что это такое :-)

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