C の列挙の宣言
列挙型は名前付きの整数定数で構成されます。列挙型の宣言 (省略可能) 列挙型のタグの名前を指定し名前付きの整数識別子のセットを定義します (列挙型「設定」の 「列挙定数列挙子の」 「または」メンバー」呼ばれます)。その型で定義した列挙体の値の列挙体の値 1 を持つ変数。
enum の型の変数はインデックスの式ですべての算術演算子や関係演算子のオペランドとして使用できます。列挙型には長所を #define のプリプロセッサ ディレクティブに値が自動的に生成され通常のスコープ規則に従うことができる方法を提供します。
ANSI C では列挙子の定数値を定義する式に int の型が常に含まれています ; したがって列挙型変数に関連付けられたストレージは int 単一の値に必要なストレージです。列挙体の列挙体の定数または変数。値は整数式でなく C 言語の割り当てを使用できます。
構文
列挙指定子 :
列挙 の 識別子 opt**{** 列挙子 リスト }列挙 ID
列挙型が 列挙子リスト で定義したオプションの ID 名 。この識別子はリストで指定された列挙体のタグに」 「と呼ばれます。フォームの型指定子
enum identifier { enumerator-list }
識別子を 非終了と 列挙子リスト で指定された列挙体のタグであることを宣言します。 列挙子リストを 定義する 「コンテンツを列挙子」。 列挙子リストは 後で詳しく説明します。
タグの宣言が表示されている場合タグを使用しますが省略されて後続の宣言は 列挙子リストを 指定する前に宣言された列挙型。タグは定義済み列挙型とその列挙体は現在のスコープ内にある必要があります。列挙型は他の場所で定義されるため 列挙子リストが この宣言に表示されません。列挙体の列挙型と typedef の宣言から派生した型の宣言は列挙型が定義される前に行われる列挙のタグを使用できます。
構文
列挙子リスト :
列挙子列挙子リスト enumerator
enumerator:
列挙型定数列挙定数の = の 定数式
列挙定数型 :
identifier
列挙リスト の各 列挙型定数は 列挙型に設定済みの値を指定します。既定では最初の 列挙定数 の値 は 0 に関連付けられます。ボックスで次の 列挙定数の 値と異なる値に明示的に関連付けるに関連付けられます ( 定数式 + 1)。 列挙定数 の名前は値と同じです。
値の既定値のシーケンスをオーバーライドする列挙型 定数 = 定数式を 使用できます。したがって 列挙定数 = 定数式が 列挙子リスト では 列挙定数は 定数式 で指定された値に関連付けられます。 定数式は int の型があり負になる可能性があります。
次の規則は列挙型のメンバーに適用されます :
列挙型のセットに重複する定数値を含めることもできます。たとえば同じ設定されて null と zero と値 0 を 2 行の識別子でこの名前の関連付けることができます。
列挙型のリストの識別子は他の列挙リストの通常の変数名と同じ識別子を含むビューの同じスコープの識別子から個別である必要があります。
列挙型のタグは通常のスコープ規則に準拠します。これらは同じ表示の他の列挙型構造体共用体の個々のタグである必要があります。
例
これらの例は列挙型の宣言を示しています :
enum DAY /* Defines an enumeration type */
{
saturday, /* Names day and declares a */
sunday = 0, /* variable named workday with */
monday, /* that type */
tuesday,
wednesday, /* wednesday is associated with 3 */
thursday,
friday
} workday;
値 0 は既定ではsaturday に関連付けられます。識別子 sunday は 0 に明示的に設定されます。残りの識別子。値 1 からは既定で 5 です。
この例では設定 DAY の値は可変 today に割り当てられます。
enum DAY today = wednesday;
値を割り当てるときに列挙定数の名前が使用されていることに注意してください。DAY の列挙体は以前に宣言されてから列挙型のタグ DAY だけが必要です。
明示的に列挙型の変数に整数値を割り当てるには型キャストを使用します :
workday = ( enum DAY ) ( day_value - 1 );
このキャストは C に推奨されますが必須ではありません。
enum BOOLEAN /* Declares an enumeration data type called BOOLEAN */
{
false, /* false = 0, true = 1 */
true
};
enum BOOLEAN end_flag, match_flag; /* Two variables of type BOOLEAN */
この宣言ではように指定できます。
enum BOOLEAN { false, true } end_flag, match_flag;\
またはとして
enum BOOLEAN { false, true } end_flag;
enum BOOLEAN match_flag;
これらの変数の使用例は次のような可能性があります :
if ( match_flag == false )
{
.
. /* statement */
.
}
end_flag = true;
名前のない列挙子のデータ型も宣言できます。データ型の名前が省略され変数を宣言できます。可変 response で定義されている型の変数です :
enum { yes, no } response;