2011-01-17 12 views
6

以下のコードでtypedefが必要なのはなぜですか?なぜtypedefは列挙型で使用されていますか?

typedef enum _Coordinate { 
    CoordinateX = 0, ///< X axis 
    CoordinateY = 1, ///< Y axis 
    CPCoordinateZ = 2 ///< Z axis 
} Coordinate; 

なぜ以下のコードがあり、typedefを削除しないのですか?

enum Coordinate { 
    CoordinateX = 0, ///< X axis 
    CoordinateY = 1, ///< Y axis 
    CPCoordinateZ = 2 ///< Z axis 
}; 
+0

アンダースコアで始まる大文字で始まる名前は、どんなコンテキストでも予約されています(新しいCキーワードでは、C99の '_Bool'、' _Complex'、C1xの '_Atomic'、' _Generic'など)代わりに末尾のアンダースコア... – Christoph

答えて

11

あなたがいないtypedefあなたの列挙を行う場合は、あなたの他のコードでは、あなたがCoordinateがenumである知っているにもかかわらず、enum CoordinateだけではなくCoordinateとしてそれを参照する必要があります。それを参照するとき、enumキーワードの冗長性を排除するだけです。それをより明確にするために

は、ここにあなたがそれを宣言するとは別に、それをtypedef場合、それがどのように見えるかです:

enum _Coordinate { 
    CoordinateX = 0, 
    CoordinateY = 1, 
    CPCoordinateZ = 2 
}; 

// You map the enum type "enum _Coordinate" to a user-defined type "Coordinate" 
typedef enum _Coordinate Coordinate; 

また、これは(OBJの-Cの列挙型はとにかくちょうどCの列挙型です)Cの構造体と列挙型に適用されます。

関連する問題