C项目中带有功能指针的模块循环依赖

时间:2017-07-27 05:31:37

标签: c function-pointers circular-dependency

如果在项目中使用函数指针,我会陷入两难境地: 我有一个通用模块“master”,它基于项目设置可以与一个或多个模块进行通信,例如“slave1”,“slave2”,“slave3”......所有从站都提供了诸如

之类的功能
slave_x_init();
slave_x_send();
slave_x_receive();
(where x = 1, 2, 3...)

现在我有项目特定的文件,相应地调用这些函数,它运行良好。但似乎使用函数指针表将有助于统一任何新从属的接口设计。

typedef struct {
    init_t init_func;
    send_t send_func;
    receive_t receive_func;
} master_interface_t;
(xxx_t is the function pointer)

这种方法的唯一问题是我必须包含来自“master”的头文件,它现在具有结构定义,这似乎导致主模块和从模块之间的循环依赖。有没有办法解决这个问题,甚至是接口设计的好方法呢?

更新

人们建议使用不同的头文件,例如“master-intf.h”,以将接口结构与主模块中的主API分开。我仍然很好奇,如果我们需要一个新的主人,比如说master_v2用于未来的项目(master和master_v2将是互斥的,意味着其中只有一个将在一个项目中编译),那么奴隶必须被修改为包含来自master_v2的相同标题,对我来说似乎不太理想?

这是模块的一个例子......

|
|- master
|---- master.c
|---- master.h
|---- master_interface.h
|- master_v2
|---- master_v2.c
|---- master_v2.h
|---- master_v2_interface.h
|- slave1
|---- slave1.c
|- slave2
|---- slave2.c

根据项目,将编译master或master_v2,这将导致slaveX.c中的#ifdef以下使用似乎很难管理。

#ifdef PROJECT1
#include "master/master_interface.h"
#elif PROJECT2
#include "master_v2/master_v2_interface.h"
#endif

0 个答案:

没有答案