Ты прав.Это будет один тип, который может содержать несколько различных типизированных значений.
Это первый шаг.Вторым шагом будет добавление еще одного типа к этому.
Для этого вы добавите идентификатор типа к enum
и добавите само значение в объединение, что-то вроде:
typedef enum {FIXNUM,FLOATNUM} object_type;
typedef struct object {
object_type type;
union {
struct { long value; } fixnum;
struct { float value; } floatnum;
} data;
} object;
Что касается причины, по которой у вас есть однополевые структуры, я предполагаю, что они допускают возможность многополевых структур в дальнейшем:
typedef enum {FIXNUM,FLOATNUM,STRING} object_type;
typedef struct object {
object_type type;
union {
struct { long value; } fixnum;
struct { float value; } floatnum;
struct { size_t len; char *data; } string;
} data;
} object;
Это просто предположение на моемотчасти, это, вероятно, станет ясно по мере продвижения по итерациям , почему они решили сделать это таким образом.