2017-12-14 2 views
-1

유니온 내부의 형식을 참조하고 싶습니다. 나는 다음과 같은 코드가 있습니다 :C 유니온 내부의 참조 유형

내가 그러나 나는 단지 DIGIT_1, DIGIT_2, DIGIT_3, DIGIT_4, SEG_1, SEG_2의 목록이 표시하고 DISPLAY_1.DIGITS 또는 DISPLAY1.SEGMENTS처럼 뭔가를 할 수 있도록하려면
typedef union 
{ 
    typedef enum DIGITS_T 
    { 
     DIGIT_1 = 0, 
     DIGIT_2 = 1, 
     DIGIT_3 = 2, 
     DIGIT_4 = 3 

    } DIGITS; 

    typedef enum SEGMENTS_T 
    { 
     SEG_1 = 0, 
     SEG_2 = 1, 
     SEG_3 = 2, 
     SEG_4 = 3, 
     SEG_5 = 4, 
     SEG_6 = 5, 
     SEG_7 = 6, 
     SEG_8 = 7 

    } SEGMENTS; 
} DISPLAY_1; 

, DISPLAY1에 액세스 할 때 등.

내가하고있는 일을 할 수 있습니까? 아니면 유니언을 올바르게 사용하지 않았습니까?

감사합니다.

+4

당신은'내부 typedef'는'union' ... –

+0

게시하지 않습니다하지 않는 코드 그림. 그것을 질문에 붙여 넣으십시오. –

+0

@ChristianGibbons 코드를 삽입 할 때 모든 것을 올바르게 잡아 내지 않아 모든 것이 포맷되거나 회색 상자로 둘러싸이지 않습니다. 대신 내가 너 대신 무엇을 할거야? – Schwagmister

답변

1

원래 사람들의 질문에 내가 분명하지 않은 것 같지만, 유진 쉬는 대답 할 수있었습니다.

필자는 기본적으로 두 개의 typedef enum의 DIGITS 및 SEGMENTS가 있습니다. DISPLAY_1과 DISPLAY_2 (노조) 디스플레이에이를 일반적으로 적용 할 방법이 필요했습니다. DISPLAY_1.DIGITS 또는 DISPLAY_1.SEGMENTS를 사용하여 디스플레이 1 또는 디스플레이 2의 숫자 또는 세그먼트에 액세스 할 수있었습니다. 이것은 switch 문에 대해 열거 형을 사용할 수 있어야한다는 것을 제외하고는 작동합니다.

그래서 내가해야 할 일은 열거 형 열거 형을 노동 조합 외부에 정의한 다음 해당 조합에 대한 참조를 노동 조합 내부의 항목으로 작성하는 것이 었습니다. 내 코드는 아래에 게시됩니다.

열거 :

typedef enum DIGITS_T 
{ 
    DIGIT_1 = 0, 
    DIGIT_2 = 1, 
    DIGIT_3 = 2, 
    DIGIT_4 = 3, 
    DIGIT_NOTHING = 4 

}DIGITS; 


typedef enum SEGMENTS_T 
{ 
    SEG_1 = 0, 
    SEG_2 = 1, 
    SEG_3 = 2, 
    SEG_4 = 3, 
    SEG_5 = 4, 
    SEG_6 = 5, 
    SEG_7 = 6, 
    SEG_8 = 7, 
    SEG_NOTHING = 8 

} SEGMENTS; 

노동 조합 :

typedef union 
{ 
    DIGITS Digits; 
    SEGMENTS Segments; 

} DISPLAY_1; 

typedef union 
{ 
    DIGITS Digits; 
    SEGMENTS Segments; 

} DISPLAY_2; 

typedef union 
{ 
    DISPLAY_1 Display_1; 
    DISPLAY_2 Display_2; 

} DISPLAYS; 

사용 예 :

void Clear_Digit(DISPLAYS display, DIGITS passed_digit) 
{ 
    switch(display) 
    { 
     case DISPLAYS.Display_1: 

      switch(passed_digit) 
      { 
       case DIGIT_1: 

        break; 

       case DIGIT_2: 

        break; 

       case DIGIT_3: 

        break; 

       case DIGIT_4: 

        break; 
      } 

      break; 

     case DISPLAYS.Display_2: 

      switch(passed_digit) 
      { 
       case DIGIT_1: 

        break; 

       case DIGIT_2: 

        break; 

       case DIGIT_3: 

        break; 

       case DIGIT_4: 

        break; 
      } 

      break; 
    } 
}