Я хочу передать произвольную функцию, и это аргументы другой функции в С.Как передать функцию И переменный список аргументов другой функции в C?
Например, как приведенный ниже код (который, очевидно, не работает)
#include <stdio.h>
void doit(int (*f)(...), char *fname, ...)
{
va_list argptr;
va_start(argptr, fname);
f(argptr)
va_end(argptr);
}
int func1(char *a, int b)
{
fprintf(stderr, "func1 %s %d\n", a, b);
}
int func2(char *a, int b, int c)
{
fprintf(stderr, "func2 %s %d %d\n", a, b, c);
}
int main(int argc, char **argv)
{
doit(func1, "func1", "blah", 10);
return 0;
}
http://stackoverflow.com/questions/840501/how-do-function-pointers-in-c-work – user3605508
Я понимаю, как работают основные указатели функций. Мой вопрос - посмотреть, можете ли вы передать переменные аргументы функции. Это теоретически возможно, потому что в конце дня аргументы просто передаются в стек. Я могу сделать это в ассемблере легко, задаваясь вопросом, есть ли трюк C, чтобы не сделать это, не прибегая к сборке. –
Стандарт C не имеет права на стеки. И типичные ABI не используют только стек для передачи аргументов. – Olaf