c - 奇怪的 C 语句作为结构中的字段

标签 c syntax

首先,我不是 C 专家,但我认为我能够分解 C 代码。我目前正在阅读一些开源存储库,但不知道头文件中某些结构中的以下语句意味着什么:

struct some_struct{
   ... 
   /* Callback when non-reply message comes in (inside db transaction) */
   void (*billboardcb)(void *channel, bool perm, const char *happenings);
   ...
} 

我认为函数不能像结构中的方法一样声明。但如果这是一个变量(称为 billboardcb),为什么会有所有这些参数?我在此代码库中没有找到名为 billboardcb 的宏。

最佳答案

一个function pointer是一个存储函数地址的指针。函数指针可以像任何其他指针一样存在于结构内部。 void (*billboardcb) 之后列出的 (void *channel, bool perm, const char *happenings) 参数是函数的参数。 (*billboardcb) 指针前面的 void 表示该函数不返回任何内容。

如果您搜索 some_struct 结构体的实例化位置,您可能会找到分配给该指针的实际函数。分配给指针的函数将像任何其他函数一样进行声明,然后通过将函数的内存地址分配给结构体的指针来将其地址存储在结构体中。

关于c - 奇怪的 C 语句作为结构中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51542640/

相关文章:

c - 使用 fscanf 读取两行整数

c - extern 后跟字符串文字

c# - 数据读取器 MYSQL 中没有当前查询

python - python如何解析++x?

Javascript - 意外标记,如果

c - C 中的局部变量和静态变量(续)

c - 位移掩码仍然让我望而却步

c - 如何使用相对于 c 文件的路径而不是工作目录打开文件

mysql - 错误代码 : 1292. 截断不正确的 DOUBLE 值

syntax - 如何在 CoffeeScript fat-arrow 回调中引用实际的 'this' ?