执行匿名结构更改布局和填充

Do anonymous struct change layout and padding?

本文关键字:布局 填充 结构 执行      更新时间:2023-10-16

我正在处理来自遗留接口的匿名结构。在运行时,字段从外部源填充,例如:

struct foo {
    union {
        struct {
            int a;
        };
        struct {
            int b;
            int c;
            int d;
        };
    };
};

联合的想法是,根据外部因素,遗留接口使foo行为就好像它只包含结构 1 或 2 一样。C++的匿名工会是合法的;匿名结构不是。据我所知,匿名结构真正做的只是使其成员对外范围可见。

匿名结构对程序是否有任何"可见影响",或者它只是适合对相关字段进行分组?也就是说,我可以让它union { int a; int b; int c; int d; }而没有与以前的代码有明显的差异吗?

这两个例子完全不同。

union { int a; int b; int c; int d; }有 4 个成员,一次只能有一个成员处于活动状态。所有 4 个元素的大小相同。

union {
    struct { int a; };
    struct { int b,c,d };
};

有 2 个成员,他们的大小不一样