C - 将参数未知的函数传递给另一个函数,并调用它
C - Passing function with unknown params to another function, and calling it
我正在努力实现这样的目标:
void sum(int a, int b){ printf("result: %d", a+b); }
void callFunc(void (*funct)(...), ...)
{
va_list ars;
va_start(ars, funct);
funct(ars);
va_end(ars);
}
int main()
{
callFunc(sum, 2,3);
return 0;
}
但这行不通,因为需要两个 va_list
来传递 funct
参数和参数。但是,即使我尝试传递求和函数,它也会显示:error: invalid conversion from 'void (*)(int, int)' to 'void (*)(...)'
那么如何使这项工作成为良好的旧 C 风格?
你不能那样做。简直不可能。
你能做的最好的事情(同时保持它的通用性)是将 funct
改为 va_list
,就像 vprintf
一样。但这可能不会很好地满足您的目的。
或者,您可以做一个宏:
#include <stdio.h>
#define CALL_FUNC(func, ...) func(__VA_ARGS__)
void sum(int a, int b){ printf("result: %d", a+b); }
int main()
{
CALL_FUNC(sum, 2, 3);
return 0;
}
我正在努力实现这样的目标:
void sum(int a, int b){ printf("result: %d", a+b); }
void callFunc(void (*funct)(...), ...)
{
va_list ars;
va_start(ars, funct);
funct(ars);
va_end(ars);
}
int main()
{
callFunc(sum, 2,3);
return 0;
}
但这行不通,因为需要两个 va_list
来传递 funct
参数和参数。但是,即使我尝试传递求和函数,它也会显示:error: invalid conversion from 'void (*)(int, int)' to 'void (*)(...)'
那么如何使这项工作成为良好的旧 C 风格?
你不能那样做。简直不可能。
你能做的最好的事情(同时保持它的通用性)是将 funct
改为 va_list
,就像 vprintf
一样。但这可能不会很好地满足您的目的。
或者,您可以做一个宏:
#include <stdio.h>
#define CALL_FUNC(func, ...) func(__VA_ARGS__)
void sum(int a, int b){ printf("result: %d", a+b); }
int main()
{
CALL_FUNC(sum, 2, 3);
return 0;
}