根据C11标准N1539草案,C中的 enum
具有以下语义(为简洁起见而编辑)
语义3枚举器列表中的标识符声明为具有int类型的常量,并且可以出现在允许的位置 . [...] 4每个枚举类型应与char,有符号整数类型或无符号整数类型兼容 . 类型的选择是实现定义的,但应能够表示枚举的所有成员的值 . [......]C11§6.7.2.23-4
Questions :如果所有单个枚举器都是int类型的常量,为什么 enum
的兼容类型整体上是实现定义的类型?为什么枚举器没有相同的兼容类型?
1 回答
扩展@Lundin comment,这种方法是 consistent ,其中C常量如
'A'
,类型为int
而不是char
.在C中,确实没有类型的原始常量小于
int
. C有利于在可能的情况下将较小的类型推广到int
. 我怀疑它是为了一个更简单的编译器 - 这在20世纪70年代很重要 .通过允许
enum
的实例更小,它占用更少的空间,就像通常那样char
可能小于int
.样本输出
没有评论这是一个很好的设计 - 只是解释我对原因的理解 .