enum

C に適用 C++ に適用

目的

列挙が占有するストレージの量を指定する。

構文


構文図

構文の注意事項:

  1. C コンパイルのデフォルト
  2. C++ コンパイルのデフォルト

ここで、有効な enum 設定は、以下のとおりです。


1 列挙が 1 バイトのストレージを占有すること、および、列挙の値の範囲が signed char の制限内である場合、型が char になること、それ以外の場合は unsigned char になることを指定します。
2 列挙が 2 バイトのストレージを占有すること、および、列挙の値の範囲が signed short の制限内である場合、型が short になり、それ以外の場合は unsigned short になることを指定します。
4 列挙が 4 バイトのストレージを占有すること、および、列挙の値の範囲が signed int の制限内である場合、型が int になり、それ以外の場合は unsigned int になることを指定します。
8 列挙が 8 バイトのストレージを占有することを指定します。
32 ビット・コンパイル・モードでは、列挙値の範囲が signed long long の制限内にある場合、その列挙は long long 型で、そうでない場合は unsigned long long です。
64 ビット・コンパイル・モードでは、列挙値の範囲が signed long の制限内にある場合は、その列挙は long 型で、そうでない場合は unsigned long です。
int 列挙が 4 バイトのストレージを占有して、 int で表されることを指定します。値は、 C コンパイルにおける signed int の範囲を超えることはできません。
intlong 列挙の値の範囲が int の限度を超える場合、列挙が 8 バイトのストレージを占有することを指定します。 -qenum=8 の説明を参照してください。
列挙の値の範囲が int の制限を超えない場合は、列挙は 4 バイトのストレージを占有し、int によって示されます。
small 列挙が列挙内の値の範囲を正確に表せる最小のスペース (1、2、4、または 8 バイトのストレージ) を占有するように指定します。値の範囲に負の値が含まれない限り、符号は unsigned です。

8 バイトの enum が結果として生じる場合、実際に使用される列挙型はコンパイル・モードに依存しています。-qenum=8 の説明を参照してください。

#pragma enumおよび #pragma optionsも参照してください。

-qenum=small オプションは、 enum 定数の範囲を表すことができる最小の事前定義型に必要なストレージの量を enum 変数 に割り振ります。デフォルトでは、符号なしの事前定義型が使用されます。enum 定数のいずれかが負の場合は、符号付きの事前定義型が使用されます。

-qenum=1|2|4|8 オプションは、 enum 変数 に特定の量のストレージを割り振ります。指定されたストレージ・サイズが enum 変数の範囲が必要とするサイズよりも小さい場合は、重大エラー・メッセージが出され、コンパイルが停止します。

ISO C 1989 および ISO C1999 規格では、列挙範囲が int の範囲を超えないことが要求されます。有効な -qlanglvl=stdc89 または -qlanglvl=stdc99 でコンパイルすると、列挙の値が int の範囲を超える場合、コンパイラーは以下のように振る舞います。

以下の表に、事前定義型の選択のための優先順位を示します。この表には、事前定義型、対応する事前定義型の enum 定数の最大範囲、およびその事前定義型に必要なストレージの量、つまり、最小サイズの enum に適用した場合に、 sizeof 演算子によって得られる値も示します。

関連参照

コンパイラーのコマンド行オプション
#pragma enum
#pragma options

Enum サイズと型 - 特に断りがない限り、すべての型が signed です。
  enum=1 enum=2 enum=4 enum=8
32 ビット・コンパイル・モード 64 ビット・コンパイル・モード
範囲 var const var const var const var const var const
0..127 char int short int int int long long long long long long
-128..127 char int short int int int long long long long long long
0..255 unsigned char int short int int int long long long long long long
0..32767 ERROR1 int short int int int long long long long long long
-32768..32767 ERROR1 int short int int int long long long long long long
0..65535 ERROR1 int unsigned short int int int long long long long long long
0..2147483647 ERROR1 int ERROR1 int int int long long long long long long
-(2147483647+1) ..2147483647 ERROR1 int ERROR1 int int int long long long long long long
0..4294967295 ERROR1 unsigned int ERROR1 unsigned int unsigned int unsigned int long long long long long long
0..(263-1) ERROR1 long2b ERROR1 long2b ERROR1 long2b long long2b long long2b long2b long2b
-263..(263-1) ERROR1 long2b ERROR1 long2b ERROR1 long2b long long2b long long2b long2b long2b
0..264 ERROR1 unsigned long2b ERROR1 unsigned long2b ERROR1 unsigned long2b unsigned long long2b unsigned long long2b unsigned long2b unsigned long2b

注:

  1. これらの列挙は -qenum=1|2|4 設定では大き過ぎます。重大エラーが出されてコンパイルが停止します。

    この状態を訂正するには、列挙の範囲を狭めて、より大きな enum 設定を選択するか、または small または intlong などの動的 enum 設定を選択する必要があります。

  2. C に適用 列挙型は、C アプリケーションを ISO C 1989 および ISO C 1999 規格にコンパイルするときに、int の範囲を超えてはいけません。有効な -qlanglvl=stdc89 または -qlanglvl=stdc99 でコンパイルすると、列挙の値が int の範囲を超える場合、コンパイラーは以下のように振る舞います。

    1. -qenum=int が有効な場合、重大エラー・メッセージが出されてコンパイルが停止する。
    2. -qenum のほかのすべての設定には、情報メッセージが出されてコンパイルが継続する。

Enum サイズと型 - 特に断りがない限り、すべての型が signed です。
  enum=int enum=intlong enum=small
32 ビット・コンパイル・モード 64 ビット・コンパイル・モード 32 ビット・コンパイル・モード 64 ビット・コンパイル・モード
範囲 var const var const var const var const var const
0..127 int int int int int int unsigned char int unsigned char int
-128..127 int int int int int int signed char int signed char int
0..255 int int int int int int unsigned char int unsigned char int
0..32767 int int int int int int unsigned short int unsigned short int
-32768..32767 int int int int int int short int short int
0..65535 int int int int int int unsigned short int unsigned short int
0..2147483647 int int int int int int unsigned int unsigned int unsigned int unsigned int
-(2147483647+1) ..2147483647 int int int int int int int int int int
0..4294967295 unsigned int unsigned int unsigned int unsigned int unsigned int unsigned int unsigned int unsigned int unsigned int unsigned int
0..(263-1) ERR2a ERR2a long long2b long long2b long2b long2b unsigned long long2b unsigned long long2b unsigned long2b unsigned long2b
-263..(263-1) ERR2a ERR2a long long2b long long2b long2b long2b long long2b long long2b long2b long2b
0..264 ERR2a ERR2a unsigned long long2b unsigned long long2b unsigned long2b unsigned long2b unsigned long long2b unsigned long long2b unsigned long2b unsigned long2b

注:

  1. これらの列挙は -qenum=1|2|4 設定では大き過ぎます。重大エラーが出されてコンパイルが停止します。この状態を訂正するには、列挙の範囲を狭めて、より大きな enum 設定を選択するか、または small または intlong などの動的 enum 設定を選択する必要があります。

  2. C に適用 列挙型は、C アプリケーションを ISO C 1989 および ISO C 1999 規格にコンパイルするときに、int の範囲を超えてはいけません。有効な -qlanglvl=stdc89 または -qlanglvl=stdc99 でコンパイルすると、列挙の値が int の範囲を超える場合、コンパイラーは以下のように振る舞います。

    1. -qenum=int が有効な場合、重大エラー・メッセージが出されてコンパイルが停止する。
    2. -qenum のほかのすべての設定には、情報メッセージが出されてコンパイルが継続する。

IBM Copyright 2003