36

タイプは符号付きですか、enumそれとも符号なしですか?列挙型の符号は、C / C99 / ANSI C / C ++ / C ++ x / GNU C / GNU C99の間で異なりますか?

ありがとう

4

2 に答える 2

28

列挙型は整数で表されることが保証されていますが、実際の型(およびその符号)は実装に依存します。

列挙型の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標準よりも前のものであるため、少なくとも歴史的な観点からは興味深いものです。

于 2010-04-05T15:38:09.587 に答える
0

これは古い質問です...しかし、私はこれを見つけました:

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ではなく数値として表示します。

于 2016-06-15T14:25:18.317 に答える