タイプは符号付きですか、enum
それとも符号なしですか?列挙型の符号は、C / C99 / ANSI C / C ++ / C ++ x / GNU C / GNU C99の間で異なりますか?
ありがとう
列挙型は整数で表されることが保証されていますが、実際の型(およびその符号)は実装に依存します。
列挙型の1つに負の値を指定することにより、列挙型を符号付き型で表すように強制できます。
enum SignedEnum { a = -1 };
C ++ 0xでは、列挙型の基になるタイプを明示的に指定できます。
enum ShortEnum : short { a };
(C ++ 0xは、スコープ付き列挙のサポートも追加します)
完全を期すために、それをCプログラミング言語第2版に追加します。、列挙子はタイプint
(p。215)を持つものとして指定されます。K&RはC標準ではないため、ISO Cコンパイラの標準ではありませんが、ISO C標準よりも前のものであるため、少なくとも歴史的な観点からは興味深いものです。
これは古い質問です...しかし、私はこれを見つけました:
typedef unsigned ENUMNAME; // this makes it unsigned in MSVC C 2015
typedef enum {v0, v1, v2, v3} ENUMNAME;
次に、2ビットの符号なしインデックスとして使用できます。
typedef struct {
ENUMNAME i:2;
} STRUCTNAME;
GCCARMで試してみました-動作しません。
また、WinDbgは、STRUCTNAME.iをv0-v3ではなく数値として表示します。