Обратите внимание, что есть несколько вопросов, касающихся циклических зависимостей от SO (включая тот, который я задавал себе), но я чувствую, что ни один из них не помог мне с этой конкретной проблемой.
Пожалуйста, рассмотрите два следующих файла:
table.h
#ifndef s_table_h
#define s_table_h
#include "value.h"
#include "object.h"
typedef struct {
ObjectString* key;
Value value;
} Entry;
typedef struct {
int capacity;
int count;
Entry* entries;
} Table;
void initTable(Table* table);
void setTable(Table* table, ObjectString* key, Value value);
bool getTable(Table* table, ObjectString* key, Value* out);
#endif
object.h
#ifndef s_object_h
#define s_object_h
#include "common.h"
#include "table.h"
typedef enum {
OBJECT_STRING
} ObjectType;
typedef struct {
ObjectType type;
Table attributes;
} Object;
typedef struct {
Object base;
char* chars;
int length;
} ObjectString;
bool stringsEqual(ObjectString* a, ObjectString* b);
#endif
Как видите, эти два зависят друг от друга: table.h
нужен ObjectString*
, а object.h
нужен бетон Table
. Оба соответствующих файла реализации .c
обращаются к конкретным членам ObjectString*
и Table
соответственно.
Каков рекомендуемый способ решения этой проблемы? И вообще, каков будет общий подход к таким проблемам в C?
Пожалуйста, обращайтесь исключительно к техническому аспекту, а не к программному.