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

问题描述 投票:0回答:1

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

    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
c struct function-pointers pic xc8
1个回答
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(void)
,那么你可以:

itemWhatever.submenu = functionX;
itemWhatever.submenu();
© www.soinside.com 2019 - 2024. All rights reserved.