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;
}