繁体   English   中英

这一系列C typedef / struct / union / enum定义有什么意义?

[英]What's the point of this series of C typedef/struct/union/enum definitions?

在迈向bootstrapped scheme解释器的 第一步中 ,我找到了以下一组typedef,struct,union和enum定义:

typedef enum {FIXNUM} object_type;

typedef struct object {
    object_type type;
    union {
        struct {
            long value;
        } fixnum;
    } data;
} object;

特别是,我不确定我理解union中struct { long value; } fixnum;的结构点( struct { long value; } fixnum; ) - 一个只有一个字段的结构,用于保存一个long? 很奇怪。

但我也不确定我是否理解更重要的观点。 认为 enum定义正在发生的事情是他为词法实体设置了许多可能的类型值,并且该object是一种持有这些的object ,但也许在C中练习更多的人可以提供更详细的说明。

谢谢!

你是对的,结构里面的一个结合内部结构在这段代码中是无用的,但是作者正在使用它作为后面代码的垫脚石。 由于他知道未来的代码将会是什么样子,因此他可以准备早期代码以尽可能减少更改。

在本教程的第二部分中,定义扩展为:

typedef enum {BOOLEAN, FIXNUM} object_type;

typedef struct object {
    object_type type;
    union {
        struct {
            char value;
        } boolean;
        struct {
            long value;
        } fixnum;
    } data;
} object;

现在一个object可以包含两个不同的值(布尔值或整数),因此联合现在有用。 但内部结构仍然是多余的。 注意没有任何处理fixnums的代码必须改变。

我怀疑内部结构只是为了并行。 在v0.6中,作者添加了pair类型,它由两个指针的结构组成。

你说的没错。 这将是一种可以包含许多不同类型值的单一类型。

这是第一步。 第二步是为此添加另一种类型。

为此,您将向enum添加类型ID,并将值本身添加到union中,例如:

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;

这只是我的假设,当你逐步完成迭代时,它可能会变得清晰, 为什么他们选择这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM