因为我知道一个的每个元素enum
有自己的整数值,我尝试过:
enum Foo {
Red = 0,
Blue = 1
};
int main(void) {
enum Foo bar = 2;
return 0;
}
它......有效。我进一步查看,我认为它具有与以下相同的最小和最大限制int
(我开始体验UB之后INT_MAX
)。到那时,不是一个enum
不比一组好#define
是?不过,我在这里也很可能是错的。
An enum
变量是一个整数,其类型足够大,足以容纳在中定义的最大值enum
定义,不一定int
并且可能大于int
在某些编译器上。您可以将 int 存储为与存储类型兼容的任何其他值,在运行时不执行任何检查。
如果您提高编译器的警告级别(例如:gcc -Wall -Wextra
or 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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)