首页 > 解决方案 > 结构内带有结构参数的函数指针

问题描述

我有一个当前看起来像这样的结构(缩写为仅显示基本部分):

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;

显然,编译器需要知道该结构,然后我才能使用它。这通常是怎么做的?使用 void 指针有效,但更难理解。

标签: cfunction-pointers

解决方案


这是通过不疏忽并提供结构标记来完成的:

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

除了可读性之外,如果您将指针传递给预期的结构类型以外的东西,编译器也会报错。

添加标签还允许更松散的组件耦合。可以转发声明结构,但不能声明类型别名。


推荐阅读