-qenum
説明
列挙が占有するストレージの量を指定する。
構文

(2)
.--------intlong-.
| (1) |
+--------int-----+
>>- -q--enum--=--+-small----------+----------------------------><
+-1--------------+
+-2--------------+
+-4--------------+
'-8--------------'
注:
- C コンパイルのデフォルト
- 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 の範囲を超えていると、コンパイラーは以下のように振る舞います。
- -qenum=int が有効な場合は、重大エラー・メッセージが発行されて、コンパイルが停止されます。
- -qenum の他のすべての設定の場合は、通知メッセージが発行されて、コンパイルは継続されます。
以下のテーブルは、事前定義の型を選択するための優先順位を示したものです。
また、このテーブルは、事前定義の型、対応する事前定義の型の 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 |
注:
- これらの列挙型は -qenum=1|2|4 設定には大きすぎます。重大エラーが発行され、コンパイルが停止されます。
この条件を訂正するには、列挙型の範囲を縮小するか、もっと大きな -qenum 設定を選択するか、動的 -qenum 設定 (small または intlong など) を選択してください。
-
列挙型は、C アプリケーションを ISO C 1989 および ISO C 1999 標準にコンパイルする場合、int の範囲を超えることはできません。
-qlanglvl=stdc89 または -qlanglvl=stdc99 を有効にしてコンパイルした場合、
列挙型の値が int の範囲を超えていると、コンパイラーは以下のように振る舞います。
- -qenum=int が有効な場合は、重大エラー・メッセージが発行されて、コンパイルが停止されます。
- -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 |
注:
- これらの列挙型は -qenum=1|2|4 設定には大きすぎます。重大エラーが発行され、コンパイルが停止されます。この条件を訂正するには、列挙型の範囲を縮小するか、 もっと大きな enum 設定を選択するか、 動的 enum 設定 (small または intlong など) を選択してください。
-
列挙型は、C アプリケーションを ISO C 1989 および ISO C 1999 標準にコンパイルする場合、int の範囲を超えることはできません。
-qlanglvl=stdc89 または -qlanglvl=stdc99 を有効にしてコンパイルした場合、
列挙型の値が int の範囲を超えていると、コンパイラーは以下のように振る舞います。
- -qenum=int が有効な場合は、重大エラー・メッセージが発行されて、コンパイルが停止されます。
- -qenum の他のすべての設定の場合は、通知メッセージが発行されて、コンパイルは継続されます。
|
関連情報