类型是有enum
符号还是无符号?枚举的符号是否在以下之间有所不同:C/C99/ANSI C/C++/C++x/GNU C/GNU C99?
谢谢
枚举保证由整数表示,但实际类型(及其符号)取决于实现。
您可以通过为枚举数之一赋予负值来强制枚举由有符号类型表示:
enum SignedEnum { a = -1 };
在 C++0x 中,可以显式指定枚举的底层类型:
enum ShortEnum : short { a };
(C++0x 还增加了对作用域枚举的支持)
为了完整起见,我将在The C Programming Language, 2nd ed 中添加它。,枚举数被指定为具有类型int
(第 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 ARM 中尝试过 - 不起作用。
此外,WinDbg 将 STRUCTNAME.i 显示为数字,而不是 v0-v3。