【发布时间】:2016-07-07 18:38:41
【问题描述】:
我想将任意函数及其参数传递给 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;
}
【问题讨论】:
-
我了解基本函数指针的工作原理。我的问题是看看你是否可以将变量参数传递给函数。这在理论上是可能的,因为在一天结束时,参数只是在堆栈上传递。我可以很容易地在汇编器中做到这一点,想知道是否有一个 C 技巧可以做到这一点而不诉诸汇编
-
C 标准不强制要求堆栈。典型的 ABI 不仅仅使用堆栈来传递参数。
标签: c function pointers syntax