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

    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;

然后,如果有用相同参数和返回类型声明的函数,例如:
void functionX(),然后您可以:
itemWhatever.submenu = functionX;
itemWhatever.submenu();

关于c - 尝试在变量类型内使用void指针调用函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56436692/

10-09 07:14
查看更多