在我编写的固件中,我创建了一种变量。类似于以下内容:
struct SitemMenu {
unsigned int id;
char * text;
void * submenu
}
typedef struct SitemMenu TitemMenu;
可以使用任何功能
void functionX () {
...
}
如果我创建此变量:
TitemMenu itemWhatever;
然后做:
itemWhatever.submenu = &function (X);
我可以打电话给functionX吗?
(*itemWhatever.submenu)();
我做了类似的事情,编译器给出了这个答案:
error: (183) function or function pointer required
答案 0 :(得分:5)
是的,但是不是您编写它的方式。
函数指针的声明方式与“普通”指针的声明方式完全不同。
您需要的是:
struct SitemMenu {
unsigned int id;
char * text;
void (* submenu)(void); // this is a function pointer, as opposed to the 'normal' pointer above
};
typedef struct SitemMenu TitemMenu;
TitemMenu itemWhatever;
然后,如果您使用相同的参数和返回类型声明了某些函数,例如:
void functionX()
,然后您可以执行以下操作:
itemWhatever.submenu = functionX;
itemWhatever.submenu();