我需要按如下方式实现此代码:
#include<stdarg.h>
#include<stdio.h>
typedef struct desc{
void (*function)(void*) //Function address
int no_arg; // Number of arguments
va_list arg; //arguments list
} desc;
desc* creater(void(*func)(), int no_arg1,...){
desc *new_desc;
va_list arg1;
new_desc = (desc*)malloc(sizeof(struct desc));
new_desc->function = func;
new_desc->no_arg = no_arg1;
va_start(arg1 , no_arg1);
va_copy(new_desc->arg,arg1);
va_end(arg1);
}
void start(void(*func)(), va_list varg){
func(&varg);
}
void strat_work(struct desc *desc1){
start( desc1->function,desc1->arg);
}
int test_func(int x, int y){
printf(" The value is =",x + y);
}
int main(void){
desc *desc2;
desc = creater(test_func, 2, 1, 3);
start_work(&desc);
return 0;
}
有人能阐明这个实现吗?我可以模糊地看到一个答案,它只接受一个论点。
提前致谢。
最佳答案
一旦creator()
返回,va_list
变量及其指向的所有变量参数都无效。您必须在 creator()
返回之前提取这些参数。恐怕你必须使用 va_arg()
。
关于c - 将 va_list 传递给多个函数而不调用 va_arg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10479469/