2017-02-11 1 views
8

Compte tenu de ces structures:Est-ce que cette utilisation des unions est valide/conforme?

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

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

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

Les deux méthodes d'accès ci-dessous équivalent et non définie?

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

Notez que StructA se trouve être le premier membre de StructB. J'ai repéré cela dans une base de code qui fonctionne, je me demande simplement si c'est standard ou s'il y a des gotchas d'alignement.

Répondre

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

a a le même décalage que b dans l'union: 0

a a compensé 0 à StructB.

Les appels sont équivalents.