返回介绍

7. 位段

发布于 2024-10-12 21:58:09 字数 627 浏览 0 评论 0 收藏 0

也称作位域(bit-field),将 struct、union 成员按二进制位指定宽度。

  • 编译器合并成员,实现更紧凑存储,节省内存。
type memeber_name: width;

类型是整数(_Bool, int 等)或枚举。如省略成员名,则表示做对齐填充。位宽不能超过成员类型限制。

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>

struct prot {
    bool read   : 1;
    bool write  : 1;
    bool exec   : 1;
};

int main (void)
{
    struct prot p = {true, false, true};
    assert(sizeof(p) == 1);
    assert(p.exec == true);
    
    return 0;
}

不能对位字段 offset 和取地址。

error: cannot take address of bit-field 'read'

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文