ENUMSIZE
カテゴリー
浮動小数点と整数の制御
Pragma 等価
目的
列挙型が占めるストレージの量を指定します。
構文
.-SMALL---. >>-ENUM--(--+-INT-----+--)------------------------------------->< +-INTLONG-+ +-1-------+ +-2-------+ +-4-------+ '-8-------'
デフォルト
ENUM(SMALL)
パラメーター
- SMALL
- 列挙型が占めるストレージのサイズを最小にすることを指定します。 このサイズは、enum 定数の範囲によって、1、2、4、または 8 バイトのストレージ のいずれかになります。
- INT
- 列挙型が 4 バイトのストレージを占め、int で表されることを指定します。
- INTLONG
- LP64 が指定されている場合のみ、C++ でのみ有効です。 enum 定数の範囲が int の限界を超えている場合、列挙型が 8 バイトのストレージを占め、 long で表されることを指定します。 そうでない場合、列挙型は 4 バイトのストレージを占め、int で表されます。
- 1
- 列挙型が 1 バイトのストレージを占めることを指定します。
- 2
- 列挙型が 2 バイトのストレージを占めることを指定します。
- 4
- 列挙型が 4 バイトのストレージを占めることを指定します。
- 8
- 列挙型が 8 バイトのストレージを占めることを指定します。このサブオプションは LP64 でのみ有効です。
使用法
ENUMSIZE オプションが有効な場合、コンパイル単位で定義されるすべての enum 定数 を表すために使用される型を選択することが できます。
次の表は、enum 定数の各範囲での優先符号および型を示しています。
| ENUM 定数 | small | 1 | 2 | 4 | 8 * | int | intlong * (C++ のみ) |
|---|---|---|---|---|---|---|---|
| 0..127 | unsigned char | signed char | short | int | long | int | int |
| -128..127 | signed char | signed char | short | int | long | int | int |
| 0..255 | unsigned char | unsigned char | short | int | long | int | int |
| 0..32767 | unsigned short | ERROR | short | int | long | int | int |
| -32768..32767 | short | ERROR | short | int | long | int | int |
| 0..65535 | 符号なし short | ERROR | 符号なし short | int | long | int | int |
| 0..2147483647 | unsigned int | ERROR | ERROR | int | long | int | int |
| -231..231-1 | int | ERROR | ERROR | int | long | int | int |
| 0..4294967295 | unsigned int | ERROR | ERROR | unsigned int | long | unsigned int (C++ のみ)。C の場合は ERROR | unsigned int |
| 0 . .(263-1) * | unsigned long | ERROR | ERROR | ERROR | long | ERROR | long |
| -263..(263-1) * | long | ERROR | ERROR | ERROR | long | ERROR | long |
| 0..264 * | unsigned long | ERROR | ERROR | ERROR | unsigned long | ERROR | unsigned long |
注: この表の中でアスタリスク (*) が付いている行および列は、LP64
オプションが指定されている場合のみ、有効です。
プログラムに関する問題の診断を支援するために、このオプションの使用状況がオブジェクト・ファイルに挿入されます。
事前定義マクロ
__ENUM_OPT マクロは、C コンパイラーによってのみ定義されます。これは、ENUMSIZE オプションが有効な場合に 1 に事前定義されます。そうでない場合は、定義されません。
例
指定したストレージ・サイズが enum 定数の範囲で必要な サイズより小さい場合、コンパイラーによってエラーが発行されます。 例えば、次のようになります。
#include <limits.h>
#pragma enum(1)
enum e_tag {
a = 0,
b = SHRT_MAX /* error */
} e_var;
#pragma enum(reset)
