-1

このコードを次のように実装する必要があります。

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

誰かがこの実装に光を当てることができますか?私は答えをぼんやりと見ることができます、そしてそれはただ一つの議論を受け入れました。

前もって感謝します。

4

1 に答える 1

0

creator()戻ると、va_list変数とそれが指すすべての変数引数は無効になります。戻る前にこれらの引数を抽出する必要がありcreator()ます。を使用する必要がありますva_arg()

于 2012-05-07T09:47:10.497 に答える