ENUMSIZE

カテゴリー

浮動小数点と整数の制御

Pragma 等価

#pragma enum

目的

列挙型が占めるストレージの量を指定します。

構文

構文図を読む構文図をスキップする
            .-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 定数の各範囲での優先符号および型を示しています。

表 1. C および C++ の 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)