2009-04-27 3 views
0

パートCで12 C列挙質問

、このような列挙を宣言の間の任意の相違がある:

typedef enum{VAL1, VAL2,} firstEnum; 

このような:別に

enum secondEnum{Val1, Val2,}; 

SecondEnumを使用する場合は、次のように記述する必要があります。

enum secondEnum...; 
また

パート2

、私は右、次は同等であることを考えるにしています:パート1では

enum{Val1, Val2,} enum1; 

enum thirdEnum{Val1, Val2,} 
enum thirdEnum enum1; 

おかげ

答えて

2

があり、明らかに違い - 最初にあなたはfirstEnumと宣言していますtypedef(匿名)の列挙型の場合は、secondEnumは列挙型のタグであり、関連するtypedefはありません。あなたが指摘したように使いやすさのために最初のものが推奨されています。

部分2では、2つは同等ではありません。最初は匿名の列挙型を宣言し、enum1をその型に定義します。 2番目の列は、名前付き列挙型を宣言し、enum1をその型に宣言します。意味のあることは、コードの他の部分で名前付きの型を使用できることです。最初は、他の場所では使用できないため、列挙型の値のエイリアスとして整数値を使用する必要があります。

+0

質問(再読みが完全にはっきりしていない)という質問は、機能的な観点からのものであることを意味していました。私。パート1では、 'firstEnum'型の列挙型と 'secondEnum'型の別の列挙型を作成すると、それらは等価(yes)になります。 同じことがパート2にあります。enum1sは機能性の点で同等であると宣言されていますか(再度yes) – Lehane

+0

「機能的に同等」という意味を本当に知っているとは思いません。いずれのサンプルも実際にコードを生成することはありませんので、コンピュータがどのようなやり方で異なった動作をするとは言い難いです。とにかく、その質問は(私にとって)あまり面白くないので、列挙型の使用のほとんどの簡単な例は、何があってもほとんど同じように動作します。興味深いのは、コンパイラがどのように動作するのか、それがクライアントコードとコードのコンシューマに与える影響です –