Я разрабатываю библиотеку с общедоступным интерфейсом, содержащим объявление непрозрачной структуры:
lib_public.h
:
typedef struct lib_struct lib_struct;
void foo(lib_struct *ptr);
void bar(lib_struct *ptr);
Непрозрачная структура 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
).
Это общий подход? Если нет, то как можно было бы спроектировать его лучше.