C - 将具有未知参数的函数传递给另一个函数,并调用它

时间:2015-11-01 16:45:58

标签: c function pointers parameters

我正在努力实现这样的目标:

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 s,funct参数和参数传递。但是,即使我尝试传递sum函数,也会说:error: invalid conversion from 'void (*)(int, int)' to 'void (*)(...)'

那么如何让这个作品老C风格呢?

1 个答案:

答案 0 :(得分:3)

你不能这样做。这根本不可能。

你可以做的最好的事情(保持通用)是改变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;
}