2016-03-27 1 views
0

私の最新のCプログラムでは、簡単な代数を扱う必要があります。私の基本的な理解では、一つの値だけを初期化することができます(粗い/粗い説明には申し訳ありません)という組合を作成するとき、私は同じデータ型の変数を持つことはできませんでした。ここでは、コードは次のようになります。ここではユニオンの複製メンバー

typedef union 
{ 
    int val; 
    Unknown val; 
}Value; 

は誤りです:

In file included from grid.c:5:0: 
line.h:9:10: error: duplicate member ‘val’ 
    Unknown val; 

私はちょうど初心者の仮定を作っていますか?もしそうなら、なぜユニオン内で変数名をユニークにする必要があるのですか? 読んでいただきありがとうございます。 EDIT: 念のため:

typedef struct 
{ 
    char label; 
}Unknown; 
+0

'C'の共用体は名前空間です。重複する名前は使用できません。 –

答えて

1

2つの異なる変数の型が同じものを挙げることができると想定する間違った仮定です。整数型またはUnkown型のデータをvalに設定しようとすると、問題が発生します。プログラムはあなたがUnknownかint型の値を参照しているかどうかを知らないでしょう(それは魔法のようにあなたのためにそれを理解しません)。したがって、それを異なるものと名づけたほうがよい。また、適切に設定されているものを適切に表す名前を付ける方が、命名規則が優れています。