首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C中跨匿名结构合并位字段

在C中跨匿名结构合并位字段
EN

Stack Overflow用户
提问于 2022-02-22 19:33:14
回答 1查看 85关注 0票数 1

我有以下代码:

代码语言:javascript
复制
typedef unsigned short u16;

struct S {
    struct {
        u16 a: 9;
        u16 b: 1;
        u16 c: 1;
        u16 d: 1;
    } __attribute__((packed));

    u16 e: 4;

} __attribute__((packed));

当我检查sizeof(S)时,它会返回3.是否可以以某种方式指示gcc跨匿名结构合并位域,以便sizeof(S)返回2。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-22 19:50:49

您正在寻找的结果可以通过使结构union代替,与两个位字段重叠来获得。第一个位字段所使用的位将在第二个位中标记为“保留”:

代码语言:javascript
复制
union S {
    struct {
        u16 a: 9;
        u16 b: 1;
        u16 c: 1;
        u16 d: 1;
    } ;
    
    struct {
        u16 reserved: 12; // Number of bits used in the first struct
        u16 e: 4;
    };
};

演示

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71227275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档