2017-12-14 4 views
-1

共用体内の型を参照したいと思います。 、私は私だけDIGIT_1、DIGIT_2、DIGIT_3、DIGIT_4、SEG_1、SEG_2のリストを提示していますがDISPLAY_1.DIGITSまたはDISPLAY1.SEGMENTSような何かを行うことができるようにしたいC言語の中での参照型

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

あなたが '' union' ... –

+0

内部typedef'は投稿しないでくださいしないでくださいコードの写真。それを質問に貼り付けます。 –

+0

@ChristianGibbons私がコードを挿入すると、正しく挿入されないので、すべてがフォーマットされたり、灰色のボックスに囲まれたりするわけではありません。あなたは私の代わりに何をしますか? @EugeneSh。 – Schwagmister

答えて

1

私の元来の質問では、一部の人にとってはっきりしていないように見えますが、ユージーン・シュはそれに答えることができました。

私は基本的に2つの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; 
    } 
} 
関連する問題