尝试在变量类型内使用void指针调用函数

Dan*_*iel 0 c struct function-pointers pic xc8

在我编写的固件中,我创建了一种变量。类似于下面的内容:

    struct SitemMenu {
      unsigned int id;
      char * text;
      void * submenu
    }
    typedef struct SitemMenu TitemMenu;
Run Code Online (Sandbox Code Playgroud)

是任何功能:

    void functionX () {
      ...
    }
Run Code Online (Sandbox Code Playgroud)

如果我创建此变量:

    TitemMenu itemWhatever;
Run Code Online (Sandbox Code Playgroud)

并做:

    itemWhatever.submenu = &function (X);
Run Code Online (Sandbox Code Playgroud)

我可以打电话给functionX做吗:

    (*itemWhatever.submenu)();
Run Code Online (Sandbox Code Playgroud)

我做了类似的事情,编译器给出了这个答案:

    error: (183) function or function pointer required
Run Code Online (Sandbox Code Playgroud)

brh*_*ans 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;
Run Code Online (Sandbox Code Playgroud)

然后,如果您声明了一些具有相同参数和返回类型的函数,例如:
void functionX(),则可以执行以下操作:

itemWhatever.submenu = functionX;
itemWhatever.submenu();
Run Code Online (Sandbox Code Playgroud)