2010-11-23 20 views
2

enumキーワードの使用は何ですか?列挙型のデータ型はどこで使用できますか? 例を挙げて説明できますか?列挙型データ型

+7

特にMSDNのドキュメントに間違っていますか? http://msdn.microsoft.com/en-us/library/whbyts4t.aspx – RPM1984

答えて

0

列挙型は、常に整数として扱われる列挙子です(大丈夫です)。後で使用できるように、共通の値やインデックスなどの順序で配置されます。名前が言うようしかし、彼らはいつものように、昇順、列挙されている:あなたは、配列を持っている場合は、

enum myenum {
January, February, March, April, May, June, July, August, September, October, November, December
};

、言う:

int months[12][30]; 

あなたが使用して数ヶ月呼び出すことができます。

また
months[March][...]; 

、あなたが宣言した場合:

enum myenum { January = 1, February, March, ..., }; 

このプログラムは列挙のカウンタを1から開始します。

最後に、最後のルールについては、たとえば10,20,30,42などの初期値を設定できますが、列挙値の1つを設定して、デフォルトで他の列を並べ替えることもできます。明示的な値が指定されない限り

+0

ほとんどの人は、1月= 0、12月= 11が混乱していることに気づくでしょう... Cの時間構造はこれにはひどいです。 –

6

enumは、番号に名前を付けます。

enum { MAX_LINES = 60 }; 

表面的に、そう#define

#define MAX_LINES 60 

#define以上enumの利点は、名前はデバッグ情報に記録されているので、デバッガがそれを使用することができるということです。

また、関連する値のセットを定義するためにenumを使用することができます。

typedef enum { RED, GREEN, BLUE } Colour; 

その後、RGB値に対するトリプレット配列のインデックスにこれらを使用することがあります:おそらく

typedef unsigned char Pixel[3]; 

Pixel p; 

p[RED] = 128; 
p[GREEN] = 128; 
p[BLUE] = 255; 

ありません世界最高の例ですが、どこにenumが使用できるのかを示しています。

+0

これをtypedefする必要はありません。 'enum foo {bar、baz};'が行います。 –

+1

@Alex:ここに示したコードでは、「色」変数がないため、正しいはずです。私は、変数を宣言するときに 'enum Color'よりも 'Color'だけを使用する方が好きなので、typedefを好む。 –

+0

、Cで十分です - C++で自動的に処理されます。 –

0

列挙は、それが0から始まる値をとり、 "ANSI C" の時に導入(またはC89)基本的な構文は

enum type { 
item1, 
item2, 
item3 
}; 

あるれる、ITEM1がITEM2 = 1、ITEM3 = 2、0を保持します。 。あなたはその後、値は、ITEM1 = 10、

enum type { 
item1 = 10, 
item2, 
item3 
}; 

をそれから始めるべき値をコンパイラに伝える場合まで、ITEM2はまた、コンパイラが整数としてそれらを考慮します。.. 11、アイテム= 12 =。

int i=10; 
i += item1; 

ます。また、型列挙型の変数を定義することができます

i = i + 10; 

です。

enum type mytype; 
mytype = item1; 

この場合、変数item1は(「サイレント」)タイプ「enum type」に変換されます。 "enum type"型の変数をintegerと混在させることができます。

しかし、変数mytypeは "enum type"型でもあり、整数と見なされるため、任意の整数変数を保持できます。 しかし、IMOでは、enumを定数として使用する必要があります。算術演算に関与してはならず、コンパイラは値を割り当てるのではなく、値自体を決定する必要があります。

+0

技術的には、C89規格の数年前に導入されましたが、K&R第1版の後に導入されました。 –

0

列挙は、そうで

enum boolean { FALSE, TRUE }; 

列挙の最初の名前が値0を有し、次の1のように、一定の整数値のリストであり、。

charは内部で整数を使用して表現されるので、あなたにも文字定数を指す列挙を宣言することができ

enum months { JAN = 1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC }; 

:いないすべての値が指定されている場合は、未指定の値が最後に指定した値から進行を続けます

enum whitespaces { SPACE = ' ', TAB = ’\t’, NEWLINE = ’\n’, RETURN = ’\r’ }; 

#defineを超える列挙型の利点は、値を生成できることです。さらに、デバッガは列挙型変数の値を記号形式で出力することができます。