用gcc C99编译
我一直在使用enums一段时间.但是,我正在使用一些示例代码来开发我的应用程序.我偶然发现了一些像这样的代码.我被告知这是使用枚举时的最佳实践.但我不知道这有什么好处.
typedef enum { TYPE_DATE, TYPE_TIME, TYPE_MONEY, TYPE_COUNT, TYPE_UNKNOWN = TYPE_COUNT } string_type_e;
为什么TYPE_COUNT
要分配TYPE_COUNT
给TYPE_UNKNOWN
谁?
非常感谢任何建议,
默认情况下,编译器会自动为枚举设置从0开始的整数值.因此,日期将为零,时间一和二.下一个值是'psuedo'枚举值TYPE_COUNT
,它将得到值3,恰好是'正确'枚举值的数量.
TYPE_UNKNOWN
是另一个值,它代表的东西不是"正确的"值,因此将无法通过测试e < TYPE_COUNT
.使它等于TYPE_COUNT
意味着每个不同的有意义的值是连续的,但我不知道任何显着的优势(如果TYPE_COUNT
一个小于2的幂,这可能会影响编译器可以使用的表示,并且它的"好"有值连续的,但它其实并不重要,因为你不会过去增加他们TYPE_COUNT
反正)
枚举值基本上是整数常量.默认情况下,它们被赋予枚举+ 1中的最后一个元素的值(第一个元素为0).当你想要计算那些用数组或类似的东西来映射的元素时,就像那样声明的枚举(如果你从中添加或删除它将动态更新),你可以将COUNT常量放在它的结尾(TYPE_COUNT
在你的例子中).为了能够区分枚举中的无效值,您可能希望声明另一个常量.在您的示例中,该常量将等于计数常量,这是一个大于枚举最大值的值.