传递具有未确定数量的参数的函数,并使用可变参数调用它

我想创建一个函数“lazy”,它接受一个具有未确定数量的参数作为参数的函数。 我需要什么类型或必须完成哪些演员表?

然后我想在函数“evaluate”中执行该事情。 然后我如何将之前传递的参数传递给传递函数指针的“lazy”函数?

一些代码来说明我的问题:

char *function_I_want_to_call(void *foo, type bar, ...); // the arguments are unknown to lazy() and evaluate() typedef struct { ??? func; va_list args; } lazy_fcall; void lazy(lazy_fcall *result, ??? func, ...) { // which type do I need here? va_start(result->_args, fund); result->func = func; } void *evaluate(lazy_fcall *to_evaluate) { return to_evaluate->func(expand_args(to_evaluate->args)); // what do I have to write there to expand the va_list? It's C, not C++11... } int main () { lazy_fcall lazy_store; lazy(&lazy_store, function_I_want_to_call, "argument_1", "argument_2"); // ... printf("%s", (char *)evaluate(&lazy_store)); } 

或者这样的事情是不可能的? 还有哪些其他可能性?

您无法将va_list扩展为单独的参数。 您要调用的函数必须能够将va_list作为参数。 参见例如printfvprintf


此外,正如caf所指出的,你不能存储va_list ,因为一旦lazy函数返回,它所指向的参数将无效。 尝试使用va_list会导致未定义的行为和各种怪异。