質問

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;

GCCアームで試してみました - 動作しません。
また、windbgはstructname.iをasとして示しています 番号, 、V0-V3としてではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top