尝试在变量类型中使用 void 指针调用函数
Trying to call function using a void pointer inside a variable type
在我编写的固件中,我创建了一种变量。类似于以下内容:
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
是的,你可以,但不是你写的那样。
函数指针的声明方式与 'normal' 指针的声明方式不同。
您需要的是:
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;
那么,如果你有一些函数声明了相同的参数和 return 类型,比如:
void functionX()
,那么你可以这样做:
itemWhatever.submenu = functionX;
itemWhatever.submenu();
在我编写的固件中,我创建了一种变量。类似于以下内容:
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
是的,你可以,但不是你写的那样。
函数指针的声明方式与 'normal' 指针的声明方式不同。
您需要的是:
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;
那么,如果你有一些函数声明了相同的参数和 return 类型,比如:
void functionX()
,那么你可以这样做:
itemWhatever.submenu = functionX;
itemWhatever.submenu();