奇怪的c语句作为struct中的字段

时间:2018-07-26 15:35:07

标签: 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的宏。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

它是函数的指针,函数指针称为billboardcb。指针只能指向具有以下三个参数的函数:

1)无效* 2)布尔 3)const char *

仅通过给指针一个兼容格式的函数的地址就可以分配指针。