- 论坛徽章:
- 0
|
这里回复可可熊给我的短信:
在server.c主函数中有plugins_call_set_defaults()函数的调用,但我找不到这个函数的实现,只有定义,也没有其它模块中找到。
这个函数的实现在plugins.c文件中, 用了那些C高人所谓自动生成代码的宏:
- #define PLUGIN_TO_SLOT(x, y) \
- handler_t plugins_call_##y(server *srv) {\
- plugin **slot;\
- size_t j;\
- if (!srv->plugin_slots) return HANDLER_GO_ON;\
- slot = ((plugin ***)(srv->plugin_slots))[x];\
- if (!slot) return HANDLER_GO_ON;\
- for (j = 0; j < srv->plugins.used && slot[j]; j++) { \
- plugin *p = slot[j];\
- handler_t r;\
- switch(r = p->y(srv, p->data)) {\
- case HANDLER_GO_ON:\
- break;\
- case HANDLER_FINISHED:\
- case HANDLER_COMEBACK:\
- case HANDLER_WAIT_FOR_EVENT:\
- case HANDLER_WAIT_FOR_FD:\
- case HANDLER_ERROR:\
- return r;\
- default:\
- log_error_write(srv, __FILE__, __LINE__, "sbsd", #x, p->name, "unknown state:", r);\
- return HANDLER_ERROR;\
- }\
- }\
- return HANDLER_GO_ON;\
- }
- PLUGIN_TO_SLOT(PLUGIN_FUNC_SET_DEFAULTS, set_defaults)
复制代码
这个例子从一个侧面回答使用所谓的"自动代码生成宏"会对代码的可读性造成多大的破坏. |
|