2017-02-11 4 views
8

을 감안할 때 이러한 구조 :C에서이 유니온 사용/준수가 유효합니까?

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의 첫 번째 멤버입니다.

나는 이것을 작동하는 코드베이스에서 발견했는데, 표준인지 아니면 정렬 맞춤이 있는지 궁금합니다.

답변

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

a는 연합 b으로 동일한 오프셋을 갖는다 :

aStructB 0 0 오프셋있다.

통화가 동일합니다.