因为我知道 an 的每个元素enum都有自己的整数值,所以我尝试了以下方法:
enum Foo {
Red = 0,
Blue = 1
};
int main(void) {
enum Foo bar = 2;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它......有效。int我进一步观察,我认为它具有与(我在 UB 之后开始体验 UB )相同的最小和最大限制INT_MAX。那么,a 不就enum比一组#defines 更好吗?不过,我在这里也很可能是错的。
变量是一个enum整数,其类型对于定义中定义的最大值而言足够大enum,不一定int且可能大于int某些编译器。您可以将 int 存储为与存储类型兼容的任何其他值,在运行时不执行任何检查。
如果您提高编译器的警告级别(例如:gcc -Wall -Wextra或clang -Weverything),您可能会收到有关该值与目标 的所有定义的枚举常量不同的警告enum。
例如,当使用以下命令调用时,clang-Weverything会产生这些警告:
test.c:7:20:警告:整数常量不在枚举类型“enum Foo”的范围内[-Wassign-enum]
枚举 Foo bar = 2;
^
test.c:7:14:警告:未使用的变量“bar”[-Wunused-variable]
枚举 Foo bar = 2;
| 归档时间: |
|
| 查看次数: |
215 次 |
| 最近记录: |