我正在设计一个包含不透明结构声明的公共接口的库:
lib_public.h
:
typedef struct lib_struct lib_struct;
void foo(lib_struct *ptr);
void bar(lib_struct *ptr);
opaque 结构隐藏了特定于lib_struct
操作系统的实现细节,因此将其直接放入似乎是一个糟糕的设计lib_struct.h
。但我仍然想为它编写使用其成员的单元测试。目前我决定创建一个单独的私有头文件,其中只包含结构定义:
lib_struct_linux.h
:
struct lib_struct{
int epoll;
int acceptor_socket;
}
因此,实现lib_struct.c
和单元测试lib_struct_test.c
将包含此标头,如下所示:
lib_struct.c
:
#include "lib_struct_linux.h"
//function definition
lib_struct_test.c
:
#include "lib_struct_linux.h"
//unit tests
lib_struct_linux.h
从结构定义在一个私有头文件 ( ) 中,使用该结构的函数在另一个公共头文件 ( lib_public.h
)中声明的意义上,这样的设计看起来很混乱。以及在另一个实现文件 ( lib_struct.c
) 中的函数定义。
这是常见的方法吗?如果不是,如何以更好的方式设计它。