因为我知道 enum
的每个元素都有自己的整数值,所以我尝试了这个:
enum Foo {
Red = 0,
Blue = 1
};
int main(void) {
enum Foo bar = 2;
return 0;
}
它……有效。我进一步查看,我认为它具有与 int
相同的最小和最大限制(我在 INT_MAX
之后开始体验 UB)。在这一点上,一个 enum
不是比一组 #define
更好吗?不过,我在这里也很可能是错的。
答案 0 :(得分:3)
enum
变量是一个整数,其类型足以满足 enum
定义中定义的最大值,不一定是 int
,并且在某些情况下可能大于 int
编译器。您可以将它存储为与存储类型兼容的任何其他值,在运行时不执行任何检查。
如果您提高编译器的警告级别(例如:gcc -Wall -Wextra
或 clang -Weverything
),您可能会收到警告,提示该值与目标 enum
的所有已定义枚举常量不同。
例如 clang 在使用 -Weverything
调用时会产生这些警告:
test.c:7:20: warning: integer constant not in range of enumerated type 'enum Foo' [-Wassign-enum] enum Foo bar = 2; ^ test.c:7:14: warning: unused variable 'bar' [-Wunused-variable] enum Foo bar = 2;