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
中定义,但似乎无论我返回的内容(如我的示例中的 2
,my_bool mb = f();
中存储的值将是 1
,除非我返回 0
或 my_false
。
这是应该发生的事情吗? enum
会立即衰减为 int
因此对于其中未定义的数字没有问题吗?
为什么 gcc 生成警告:比较有符号和无符号整数表达式 [-Wsign-compare]... printf("%d--%d\n", mb==i, mb) ;
? enum
不是 signed int
吗?
- 为什么用不同的标识符定义相同的值好呢? (即
typedef enum {xx = 1, yy = 1} zz;
)
枚举可以取其范围内的任何值。该范围由表示所有枚举器所需的位定义。在您的情况下,my_true
需要 3 位,它给出的范围是 0-7。
枚举器本质上是命名常量,没有理由不能让两个常量碰巧具有相同的值。许多常数实际上为零。
我是一名优秀的程序员,十分优秀!