繁体   English   中英

这里结合联盟的目的是什么?

[英]What is the purpose of union inside structure here?

typedef struct {
    union {
        u32 slock;
        struct __raw_tickets {
#ifdef __ARMEB__
            u16 next;
            u16 owner;
#else
            u16 owner;
            u16 next;
#endif
        } tickets;
    };                                                                                                                                  
} arch_spinlock_t;

以上是来自Linux内核的代码片段,将整个联合放入结构的目的是什么,为什么不简单地联合呢?

这是源代码的链接

Linux内核是一项正在进行中的工作,而不是“看它应该如何完成”的事情。

我相信这背后没有真正的理由,除了习惯将struct的所有内容打包到顶层。 如果您曾经想过“一切都是struct ”,那么您可能会意外地通过向实际union添加一些新字段而不是struct ,如您所期望的那样。

如果我想要有几个彼此相似但不相同的结构 - 它们有许多共同的元素,但后来变化了。 一个例子可能是在商店出售的一系列产品,其中一些商品以int单位出售(我将卖给你一两辆摩托车,但不是1.5),而其他商品以浮动单位出售(千克苹果) , 例如)?

联盟允许您在集合中并行地(即共享相同的内存)定义许多不同类型和大小的不同变量。

仔细使用,结构中的联合可用于生成一个集合,可以处理一系列略有不同的数据类型,如摩托车和苹果。

C的联合允许你定义一个内存块,它有两个(或更多)与之关联的名称,这样当与结构组合时,你可以根据一个共同的核心生成一整套已定义的变量类型,但随后会在适当。

编辑:添加示例

typedef union {
    int units;
    float kgs;
} amount ;

typedef struct {
    char selling[15];
    float unitprice;
    int unittype;
    amount howmuch;
} product;

暂无
暂无

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

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