枚举在C/C++99/C/C++ x/GNU C/GNU C99中的签名

枚举类型是否签名或无符号?枚举的签名是不同的C/C++99 / ANSI C/C++ / C x / GNU C / GNU C99?

谢谢

最佳答案
枚举保证用整数表示,但实际的类型(和它的签名)是依赖于实现的。

您可以通过向其中一个枚举器提供一个负值来强制枚举由带符号类型表示:

enum SignedEnum { a = -1 };

在C 0x中,枚举的底层类型可以被明确指定:

enum ShortEnum : short { a };

(C 0x也增加了对范围枚举的支持)

为了完整,我将在第二版的C编程语言中添加枚举器的类型为int(第215页)。 K& R不是C标准,所以这不是ISO C编译器的规范,但它确实早于ISO C标准,所以从历史的角度来看,它至少是有趣的。

转载注明原文:枚举在C/C++99/C/C++ x/GNU C/GNU C99中的签名 - 代码日志