c - 结构内带有结构参数的函数指针
问题描述
我有一个当前看起来像这样的结构(缩写为仅显示基本部分):
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;
除了可读性之外,如果您将指针传递给预期的结构类型以外的东西,编译器也会报错。
添加标签还允许更松散的组件耦合。可以转发声明结构,但不能声明类型别名。
推荐阅读
- azure - Azure 数据工厂管道运行 FTP 失败
- matlab - MATLAB 的具有 Nan 值的 fitrm
- pygame - Pygame中的手绘
- c# - .NET Core 2 IdentityServer 4 Cors 仅在本地主机上工作
- recursion - 在序言中按升序打印 0 到 10
- r - 使情节注释字体加粗
- python - 使用格式化字符串分隔数字组
- c - 强制编译器/链接器按照定义对变量进行分组(物理上位于连续 RAM 位置)
- google-analytics - Google Analytics 只显示实时数据,不显示历史数据
- javascript - 选择其他下拉列表的其他选项时禁用下拉列表的选项(选择)