C ADT: * .c включение файла

У меня есть абстрактная структура:

[Trame.h]
typedef struct s_trame t_trame;

// Allocation, setters and getters prototypes
[/Trame.h] [Trame.c]
# include "trame.h"
struct s_trame
{

}

// Allocation, setters and getters implementations
[/Trame.c]

В другом файле мне нужно знать поля в t_trame. Единственный способ сделать это — включить файл trame.c. Насколько это плохо в этом конкретном контексте или как сделать это лучше?

[Main.c]
# include "trame.h"
# include "trame.c"
int main()
{

t_trame trame;

// Do something with trame

return 0;

}
[/Main.c]

Я действительно не хочу нарушать абстракцию, но я бы предпочел использовать структуру для некоторых моих реализаций.

0

Решение

Это довольно распространенный метод создания структур черного ящика в C. Но для создания структур действительно непрозрачный, вы должны обернуть весь доступ к структуре, включая создание и уничтожение, в функции.

подобно

t_trame *trame_create();  /* Allocates and initializes the structure */
void trame_destroy(t_trame *);  /* Frees the structure */

void trame_do_something(t_trame *, int some_argument);  /* Does something with the structure */

int trame_get_some_data(t_trame *);  /* Returns some data from the structure */

и т.п.

Тогда никакой код, использующий структуру, не должен видеть фактическую структуру, он просто будет иметь указатель на нее и должен вызывать ваши функции для выполнения каких-либо операций над структурой.

1

Другие решения