【问题标题】:Is this use of unions in C valid/compliant?在 C 中使用联合是否有效/合规?
【发布时间】:2017-02-11 15:50:18
【问题描述】:

鉴于这些结构:

typedef struct {
    //[...]
} StructA;

typedef struct {
    StructA a;
    //[...]
} StructB;

typedef union {
    StructA a;
    StructB b;
} Union;

下面的两种访问方法是等价的且不是未定义的吗?

Union u;
memcpy(&u.b, /*...*/); //Pretend I populated StructB here
u.a;    // Method 1
u.b.a;  // Method 2

请注意,StructA 恰好是 StructB 的第一个成员。

我在一个有效的代码库中发现了这一点,我只是想知道它是否是标准的,或者是否有任何对齐问题。

【问题讨论】:

    标签: c struct unions


    【解决方案1】:
    typedef union {
        StructA a;
        StructB b;
    } Union;
    

    a 与联合中的b 具有相同的偏移量:0

    aStructB 中的偏移量为 0。

    调用是等价的。

    【讨论】:

      猜你喜欢
      • 2012-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-19
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      • 2021-10-23
      相关资源
      最近更新 更多