union 안에서 struct 정의... 값이 제대로 안들어 갑니다.

rndrmagkqslek.의 이미지

다음과 같은 코드에서

typedef unsigned int DWORD;
#define  PACK __attribute__ ((packed))

typedef struct _ST
{
    DWORD    a    : 8;
    
    union
    {
        struct
        {
            DWORD    b    : 4;
        } PACK;
        struct
        {
            DWORD    _b1    : 3;
            DWORD    _b2    : 1;
        } PACK;
    };
    
    DWORD    c    : 1;
    
    union
    {
        struct 
        {
            DWORD    d    : 3;
        } PACK;
        struct 
        {
            DWORD    _d1    : 1;
            DWORD    _d2    : 1;
            DWORD    _d3    : 1;
        } PACK;
    };
    
    DWORD    mask    : 1;
    
    union
    {
        DWORD PACK    e    : 1;
        DWORD PACK    _e  : 1;
    };
    
    DWORD    f    : 14;
} PACK ST;

#include <stdio.h>

int main(void)
{
    ST st;
    *(unsigned int*)&st = 0;
    st.mask = 1;
    printf("st = %d\n", *(unsigned int*)&st);
    return 0;
}

mask에 값을 대입해 보아도 값이 0이 나오네요.
gcc 컴파일러 사용하고 있습니다.

익명 사용자의 이미지

union을 다시 공부해보세요.

이를 테면,
union OOO {
X;
XX;
XXX;
XXXXX;
};
int p;

위에서 int p와 유니온과는 전혀 무관합니다.
단지, X, XX, ...들은 유니온으로 묶여( {,} ) 있으므로, 당연히 유관하지요.

rndrmagkqslek.의 이미지

그게 제 질문과 무슨 상관이죠?