c中的函数描述符

时间:2011-03-07 20:24:59

标签: c

我正在尝试实现fun_desc

类型的简单函数描述符数组
struct fun_desc {
  char *name;
  void (*fun)();
};

我有2个函数f1和f2都是coolFunct类型

typedef int (*coolFunct) (unsigned int);

我的数组定义如下

struct fun_desc funArr[]={{"f1", &f1}, {"f2",&f2}};

现在我正在尝试调用数组中的函数,我认为我需要将它转换为coolFunct,因为它是未指定的类型(或者我错了) 但是下一个调用不起作用(没有编译或运行时错误,没有任何反应):

((coolFunct)(funArr[0].fun))(1);

一如既往的帮助非常感谢...

2 个答案:

答案 0 :(得分:2)

将结构存储在结构中时,需要强制转换函数指针。您的编译器应该为您提供诊断。但是很难看出它可能是你问题的根源。

#include <stdio.h>
typedef int (*coolFunct) (unsigned int);
typedef void (*whackFunct)();

int f1(unsigned i) { puts("f1"); return 1; }
int f2(unsigned i) { puts("f2"); return 2; }

struct fun_desc {
  char *name;
  void (*fun)();
};

struct fun_desc funArr[]={{"f1", (whackFunct)&f1}, {"f2", (whackFunct)&f2}};

int main()
{
    printf("function returned %d\n", ((coolFunct)funArr[0].fun)(1));
    return 0;
}

答案 1 :(得分:1)

使用以下语法:

(*funArr[0].fun)();

另外,不要强制转换,你的函数类型不同,事情会崩溃,试试这个:

typedef int (*coolFunct) (unsigned int);

struct fun_desc {
  char *name;
  coolFunct fun;
};

(*funArr[0].fun)(1);

编辑:如果你实际上想要进行投射,那么调用的语法是:

((coolFunct)funArr[0].fun)(1);