Перекрестные ссылки на typedef структуры - PullRequest
0 голосов
/ 26 марта 2019

У меня есть 2 определения типов структур, ARRAY и OBJECT.

В ARRAY есть элементы, которые являются OBJECT.У ОБЪЕКТА (когда ТИП СЛОЖНЫЙ) есть массив его дочерних элементов

enum {
      INT,
      FLOAT,
      STRING,
      CHAR,
      COMPLEX
} typedef TYPE;`

`struct {
  TYPE type;
  ARRAY children;
  char name[50];
} typedef OBJECT;`

`struct {
  OBJECT* elements;
  int size;
} typedef ARRAY;

Я хочу создать эти структуры, но это невозможно, поскольку одно зависит от определения другого.

1 Ответ

2 голосов
/ 26 марта 2019

Вот один способ объявить псевдонимы типа TYPE, OBJECT и ARRAY, используя прямое объявление псевдонима типа OBJECT, чтобы избежать циклических зависимостей. Это требует, чтобы связанный тип struct был объявлен с тегом, который будет соответствовать его более позднему полному объявлению.

typedef enum {
    INT,
    FLOAT,
    STRING,
    CHAR,
    COMPLEX
} TYPE;

// incomplete declaration of struct _OBJECT and OBJECT
typedef struct _OBJECT OBJECT;

typedef struct {
    OBJECT* elements;
    int size;
} ARRAY;

// complete declaration of struct _OBJECT
struct _OBJECT {
    TYPE type;
    ARRAY children;
    char name[50];
};
...