gpt4 book ai didi

c - 枚举如何处理未定义的值?

转载 作者:太空宇宙 更新时间:2023-11-04 02:29:33 25 4
gpt4 key购买 nike

typedef enum {my_false, my_true = 5, my_maybe = 3} my_bool;

my_bool f(){return 2;}
int g(){return my_true;}

int main (){
my_bool mb = f();
int i = f();
printf("%d--%d\n", mb==i, mb);

mb = g();
i = g();
printf("%d--%d\n", mb==i, mb);

return 0;
}

当函数返回 enum 时发生了什么?

在我看来,在我的代码中,f() 可以返回任何数字,即使它没有在 my_bool enum 中定义,但似乎无论我返回的内容(如我的示例中的 2my_bool mb = f(); 中存储的值将是 1,除非我返回 0my_false

  1. 这是应该发生的事情吗? enum 会立即衰减为 int因此对于其中未定义的数字没有问题吗?

  2. 为什么 gcc 生成警告:比较有符号和无符号整数表达式 [-Wsign-compare]... printf("%d--%d\n", mb==i, mb) ;? enum 不是 signed int 吗?

  3. 为什么用不同的标识符定义相同的值好呢? (即 typedef enum {xx = 1, yy = 1} zz;)

最佳答案

枚举可以取其范围内的任何值。该范围由表示所有枚举器所需的位定义。在您的情况下,my_true 需要 3 位,它给出的范围是 0-7。

枚举器本质上是命名常量,没有理由不能让两个常量碰巧具有相同的值。许多常数实际上为零。

关于c - 枚举如何处理未定义的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45456182/

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