gpt4 book ai didi

枚举可以被认为是不安全的吗?

转载 作者:行者123 更新时间:2023-12-03 23:40:58 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Is it allowed for an enum to have an unlisted value? [duplicate]

(6 个回答)



Why use enum when #define is just as efficient? [duplicate]

(4 个回答)


9 个月前关闭。




因为我知道 enum 的每个元素有自己的整数值,我试过这个:

enum Foo {
Red = 0,
Blue = 1
};

int main(void) {
enum Foo bar = 2;
return 0;
}
它......有效。我进一步查看,我认为它具有与 int 相同的最小和最大限制。 (我在 INT_MAX 之后开始体验 UB)。此时,不是 enum不比一套 #define更好?不过,我在这里也很可能是错的。

最佳答案

enum变量是一个整数,其类型足以满足 enum 中定义的最大值。定义,不一定int并且可能大于 int在某些编译器上。您可以将它存储为与存储类型兼容的任何其他值,在运行时不执行任何检查。
如果您提高编译器的警告级别(例如: gcc -Wall -Wextraclang -Weverything ),您可能会收到警告,警告该值与目标 enum 的所有已定义枚举常量不同。 .
例如 叮当使用 -Weverything 调用时会产生这些警告:
test.c:7:20: 警告:整数常量不在枚举类型 'enum Foo' [-Wassign-enum] 的范围内
枚举 Foo bar = 2;
^
test.c:7:14: 警告:未使用的变量 'bar' [-Wunused-variable]
枚举 Foo bar = 2;

关于枚举可以被认为是不安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65903557/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com