Указатель на функцию с параметром структуры внутри структуры - PullRequest
0 голосов
/ 24 октября 2018

У меня есть структура, которая в настоящее время выглядит следующим образом (сокращенно, чтобы показать только основные части):

typedef struct {
    uint32_t baudrate;
    ... some other internally used values here
    void (*request_received)(void* hbus); //< this is what I'm talking about
} hbus_options_t;

Это работает.По сути, он содержит указатель на функцию, который принимает указатель на параметр типа void.

На самом деле мне бы хотелось, чтобы это было легче понять:

typedef struct {
    uint32_t baudrate;
    ... some other internally used values here
    void (*request_received)(hbus_options_t* hbus); //< this doesn't work
} hbus_options_t;

Очевидно, что компилятору нужнызнать структуру, прежде чем я смогу использовать ее.Как это обычно делается?Использование пустого указателя работает, но его сложнее понять.

1 Ответ

0 голосов
/ 24 октября 2018

Это сделано, не будучи упущенным и предоставив тег структуры:

typedef struct hbus_options {
    uint32_t baudrate;
    ... some other internally used values here
    void (*request_received)(struct hbus_options * hbus); 
} hbus_options_t;

Помимо читабельности, компилятор также будет жаловаться, если вы передадите указатель на что-то отличное от предполагаемого типа структуры.

Добавление тега также обеспечивает более слабое соединение компонентов.Можно заранее объявить структуру, но не псевдоним типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...