交叉引用 typedef 结构

Cross referencing typedef structs

我有 2 个结构类型定义,ARRAYOBJECT

ARRAY 中的元素是 OBJECTOBJECT(当它的 TYPECOMPLEX 时)有它的子数组

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;

我想创建这些结构,但这是不可能的,因为每个结构都依赖于另一个结构的定义。我收到此错误:

t.c:11:3: error: unknown type name 'ARRAY'
  ARRAY children;
  ^
1 error generated.

这是声明 TYPEOBJECTARRAY 类型别名的一种方法,使用 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];
};