C语言模块化

定义模块内部函数,设置回调函数。

/*******************************
 * client.h
 *******************************/
typedef struct socket_client socket_client;

typedef void (*socket_client_cb_t) (socket_client *c, void *udata);
void client_set_callback(socket_client *c, socket_client_cb_t *callback);

/*******************************
 * client.c 或这在初始client时,初始回调函数。
* 主要作用: 如本模块为事务获得模块,那需要调用模块具体事件的分发处理时,调用设置的回调函数 ******************************
*/ struct socket_client { socket_client_cb_t callback;
void *userdata; };
socket_client *socket_client_new()
{
socket_client *c;
c = (socket_client *)malloc(sizeof(socket_client));
if(!c)
goto fail;

return c;
fail:
return NULL;
}
void client_set_callback(socket_client *c, socket_client_cb_t *callback, void *udata) { c->callback = callback;
c->userdata = udata; }

/* when client receive a message */
void client_call(socket_client *c)
{
c->callback(c, c->userdata);
}

参考:pulseaudio源码pulsecore/socket-client.c代码

原文地址:https://www.cnblogs.com/cfox/p/2984430.html