Вызов функции C по универсальному указателю - PullRequest
3 голосов
/ 29 мая 2011

Есть ли какой-либо метод для вызова функции, просто зная ее адрес в указателе, скажем, указатель типа "void *(*)(void *)", а также номер и тип ее параметра?

Функция может иметь любое количество параметров!

Ответы [ 2 ]

5 голосов
/ 29 мая 2011

Нет, не переносимым и не стандартным способом.

Однако существует стандартный способ передачи переменного числа аргументов между функциями.Посмотрите на vsprintf.По сути, вам нужна версия функции, которая принимает va_list.

2 голосов
/ 29 мая 2011

Грубо говоря, нет.

Вы должны знать количество параметров, прежде чем вы сможете написать вызов, и, следовательно, типы тоже.Поэтому вы не можете написать одну строку кода, которая точно вызывает функцию, которая принимает 0 параметров или 1 параметр или 2 параметра.Вы всегда можете предоставить 2 и верить, что все будет работать, но компилятор (оправданно) выдаст предупреждения.

...