Здравствуйте
Положим, есть интерфейс, описанный в foo.h:
typedef struct foo_obj_tag foo_obj;
bool foo_do_something(foo_obj *foo);
...
И есть две отдельные реализации этого интерфейса, в файлах bar.c и baz.c:
/* bar.c */
#include "foo.h"
struct foo_obj_tag {
int clear;
char *clear2;
int opaq_bar;
}
/* baz.c */
#include "foo.h"
struct foo_obj_tag {
int clear;
double opaq_baz;
}
В структуре есть прозрачные поля (clear) и непрозрачные, которые отличаются в разных реализациях. Всё прекрасно работает, за исключением того неприятного момента, что приходится повторять описание прозрачных полей структуры (их довольно много) в каждом внутреннем файле библиотеки (в тестах, например):
struct foo_obj_tag {
int clear;
}
Как бы и тортик съесть и вишенкой не подавиться?) И определить структуру с прозрачными полями в заголовочном файле, и специфически «расширить» эту структуру в файлах-реализациях?