2017-02-11 2 views
8

In Anbetracht dieser Strukturen:Ist diese Verwendung von Unions in C gültig/konform?

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

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

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

Sind die beiden Zugriffsmethoden unter gleichwertig und nicht undefiniert?

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

Beachten Sie, dass StructA zufällig das erste Mitglied von StructB ist.

Ich entdeckte dies in einer Codebase, die funktioniert, ich frage mich nur, ob es Standard ist oder wenn es irgendwelche Alignments gibt.

Antwort

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

a hat die gleiche wie b in der Union Offset: 0

a 0 in StructB versetzt hat.

Die Anrufe sind gleichwertig.

Verwandte Themen