【问题标题】:strange c statement as field in a struct奇怪的 c 语句作为结构中的字段
【发布时间】:2018-07-26 15:35:06
【问题描述】:

首先,我不是 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 的宏。

【问题讨论】:

  • 您只是在struct 中声明了一个指针。指针实际上可以指向一个函数。

标签: c syntax


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    是一个函数指针,函数指针叫做billboardcb。指针只能指向具有 3 个参数的函数:

    1) 无效* 2) 布尔 3) 常量字符 *

    只要给它一个格式兼容的另一个函数的地址,就可以分配指针。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-05
      • 2017-03-01
      • 2013-07-16
      • 2015-01-11
      • 2013-07-13
      • 1970-01-01
      相关资源
      最近更新 更多