2017-02-11 2 views
8

を考えると、これらの構造:Cでのこのユニオンの使用は有効/準拠ですか?

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

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

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

等価ではなく、未定義の下の2つのアクセス方法はありますか?

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と同じオフセットを持っています

a 0がStructBに0をオフセットしています。

呼び出しは同等です。

関連する問題