struct 中带有 struct 参数的函数指针
Function pointer with struct parameter inside struct
我有一个目前看起来像这样的结构(缩写为仅显示基本部分):
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 指针是可行的,但更难理解。
这是通过不失职并提供结构标签来完成的:
typedef struct hbus_options {
uint32_t baudrate;
... some other internally used values here
void (*request_received)(struct hbus_options * hbus);
} hbus_options_t;
除了可读性之外,如果您将指针传递给预期结构类型以外的其他内容,编译器也会报错。
添加标签还允许松散的组件耦合。可以转发声明一个结构,但不能转发类型别名。
我有一个目前看起来像这样的结构(缩写为仅显示基本部分):
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 指针是可行的,但更难理解。
这是通过不失职并提供结构标签来完成的:
typedef struct hbus_options {
uint32_t baudrate;
... some other internally used values here
void (*request_received)(struct hbus_options * hbus);
} hbus_options_t;
除了可读性之外,如果您将指针传递给预期结构类型以外的其他内容,编译器也会报错。
添加标签还允许松散的组件耦合。可以转发声明一个结构,但不能转发类型别名。