enum类型是有符号的还是无符号的?枚举的签名在C/ C99 /ANSI C/C++/C++x/GNU C/ GNU C99之间有区别吗?
谢谢
发布于 2010-04-05 23:38:10
枚举保证由整数表示,但实际类型(及其符号)依赖于实现。
您可以通过为其中一个枚举数提供负值来强制使用有符号类型表示枚举:
enum SignedEnum { a = -1 };在C++0x中,可以显式指定枚举的底层类型:
enum ShortEnum : short { a };(C++0x还添加了对作用域枚举的支持)
为了完整起见,我要补充的是,在C编程语言的第二版中,枚举器被指定为具有int类型(第215页)。K&R不是C标准,所以这不是ISO C编译器的标准,但它早于ISO C标准,所以从历史的角度来看,它至少很有趣。
发布于 2016-06-15 22:25:18
这是一个老问题..。但我刚刚发现了这个:
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显示为编号,而不是v0-v3。
https://stackoverflow.com/questions/2579230
复制相似问题