我正在尝试实现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);
一如既往的帮助非常感谢...
答案 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);