2017-03-08 2 views
0

I는 다음과 같이 하나 개의 조합을 정의했습니다 :

typedef union opWord 
{ 
    struct 
    { 
     unsigned short ARE : 2; 
     unsigned short opDest : 2; 
     unsigned short opSource : 2; 
     unsigned short opcode : 4; 
     unsigned short group : 2; 
     unsigned short unused : 3; 
    } word; 
    unsigned short fullReg; 
} opWord; 

만 비트 필드 배열에 의해 다른 또 다른 매우 유사 하나

typedef union immediate 
{ 
    struct 
    { 
     unsigned short ARE : 2; 
     unsigned short imm : 13; 
    } word; 
    unsigned short fullReg; 
} immediate; 

이가 저장 될 수 있습니다 같은 배열은 어쨌든 비트의 배열에 따라 달라지기 때문에 어떻게 될까요?

opWord instructions[1000]? 

하지 않으면, 연결리스트로 할 수있는 방법이 같은 뭔가? 어떻게 포인터를 선언하겠습니까?

+4

두 공용체의 공용체를 만드시겠습니까? – jxh

답변

2

opWordimmediate 유형의 개체를 동일한 배열에 직접 저장할 수 없습니다. 그러한 배열을 선언 할 수는 없으며 포인터 캐스팅 및/또는 동적으로 할당 된 공간으로 논쟁하려고하면 엄격한 앨리어싱 규칙에 따라 실행됩니다.

당신 할이 @jxh는 의견 제안 등의 opWord과 회원 등의 immediateunion 유형을 작성하고 해당 유형의 배열을 만들 수 있습니다. 가장 간단한, 가장 간결한 형태, 즉 다음과 같습니다

union { 
    opWord op; 
    immediate imm; 
} instructions[1000]; 
또한 하나에 당신이 개 노동 조합 유형을 병합하고, 해당 유형의 배열을 만드는 고려할 수

:

union instruction { 
    struct { 
     unsigned short ARE : 2; 
     unsigned short opDest : 2; 
     unsigned short opSource : 2; 
     unsigned short opcode : 4; 
     unsigned short group : 2; 
     unsigned short unused : 3; 
    } opWord; 
    struct { 
     unsigned short ARE : 2; 
     unsigned short imm : 13; 
    } immediate; 
    unsigned short fullReg; 
}; 

union instruction instructions[1000]; 

감소 두 가지 종류의 지침에 대해 별도의 유형을 잃어 버리는 대신에 유용 할 수있는 관련 레이어 수.