Попытка вызова функции с помощью пустого указателя внутри типа переменной - PullRequest
0 голосов
/ 04 июня 2019

В той прошивке, которую я пишу, я создал тип переменной.Аналогично тому, что показано ниже:

    struct SitemMenu {
      unsigned int id;
      char * text;
      void * submenu
    }
    typedef struct SitemMenu TitemMenu;

Будь любой функцией:

    void functionX () {
      ...
    }

Если я создам эту переменную:

    TitemMenu itemWhatever;

и сделаем:

    itemWhatever.submenu = &function (X);

Могу ли я вызвать функцию X, выполнив:

    (*itemWhatever.submenu)();

Я сделал что-то похожее на это, и компилятор дал такой ответ:

    error: (183) function or function pointer required

1 Ответ

5 голосов
/ 04 июня 2019

Да, вы можете, но не совсем так, как написали.
Указатель на функцию не объявляется так же, как «нормальный» указатель.
Что вам нужно это:

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();
...