-qenum

説明

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

構文

構文図を読む構文図をスキップする                    (2)
                 .--------intlong-.
                 |  (1)           |
                 +--------int-----+
>>- -q--enum--=--+-small----------+----------------------------><
                 +-1--------------+
                 +-2--------------+
                 +-4--------------+
                 '-8--------------'
 
注:
  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の説明を参照してください。
列挙型の値の範囲が int の限度を超えないと、列挙型はストレージの 4 バイトを占有し、 int で表されます。
small 列挙型が、正確に列挙型の値の範囲を表すことができる最少量のスペース (ストレージの 1、2、4、または 8 バイト) を占有することを指定します。符号は、値の範囲が負の値を含んでいない限り、符号なし です。
8 バイトの enum の結果の場合、使用される実際の列挙型はコンパイル・モードに依存します。-qenumの説明を参照してください。

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

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

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

以下のテーブルは、事前定義の型を選択するための優先順位を示したものです。 また、このテーブルは、事前定義の型、対応する事前定義の型の enum 定数の最大範囲、およびその事前定義の型に必要なストレージの量 (つまり sizeof 演算子が最小サイズの enum に適用されたときに生み出す値) も示します。

関連情報

機能カテゴリー別コンパイラー・オプションの要約
#pragma enum
#pragma options

列挙型のサイズと型 - 特に明記されていない限り、すべての型は 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 設定には大きすぎます。重大エラーが発行され、コンパイルが停止されます。
    この条件を訂正するには、列挙型の範囲を縮小するか、もっと大きな -qenum 設定を選択するか、動的 -qenum 設定 (small または intlong など) を選択してください。
  2. C のみ 列挙型は、C アプリケーションを ISO C 1989 および ISO C 1999 標準にコンパイルする場合、int の範囲を超えることはできません。 -qlanglvl=stdc89 または -qlanglvl=stdc99 を有効にしてコンパイルした場合、 列挙型の値が int の範囲を超えていると、コンパイラーは以下のように振る舞います。
    1. -qenum=int が有効な場合は、重大エラー・メッセージが発行されて、コンパイルが停止されます。
    2. -qenum の他のすべての設定の場合は、通知メッセージが発行されて、コンパイルは継続されます。
列挙型のサイズと型 - 特に明記されていない限り、すべての型は 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 設定を選択するか、 動的 enum 設定 (small または intlong など) を選択してください。
  2. C のみ 列挙型は、C アプリケーションを ISO C 1989 および ISO C 1999 標準にコンパイルする場合、int の範囲を超えることはできません。 -qlanglvl=stdc89 または -qlanglvl=stdc99 を有効にしてコンパイルした場合、 列挙型の値が int の範囲を超えていると、コンパイラーは以下のように振る舞います。
    1. -qenum=int が有効な場合は、重大エラー・メッセージが発行されて、コンパイルが停止されます。
    2. -qenum の他のすべての設定の場合は、通知メッセージが発行されて、コンパイルは継続されます。

関連情報