c - 将 va_list 传递给多个函数而不调用 va_arg

标签 c variadic-functions

我需要按如下方式实现此代码:

#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/

相关文章:

c - 如何在我的 Mac 上添加 graphics.h 库?

c - lseek 在 O_APPEND mod 中导致分段文件

c++ - 可变参数 C++ 模板解压后终止?

java - 为什么在使用带有原始类型和包装类的可变参数重载时会出现不明确的错误?

c - 在 C 中从文件扫描到数组

C - 将字符串(句子)转换为字符串列表

c - free() : invalid next size (normal) on fclose. 但当 Valgrind 运行时不会

multithreading - 保存 fprintf 调用的变量参数列表

Java 7 使用可变参数重载

c++ - 可变函数