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会生成警告:comparison between signed and unsigned integer expressions [-Wsign-compare]... printf("%d--%d\n", mb==i, mb);
?不是enum
一个signed int
?
typedef enum {xx = 1, yy = 1} zz;
)答案 0 :(得分:2)
枚举可以在其范围内取任何值。范围由表示所有枚举器所需的位定义。在您的情况下,my_true
需要3位,其范围为0-7。
枚举器本质上是命名常量,并且没有理由不能使两个常量碰巧具有相同的值。很多常数实际上都是零。
答案 1 :(得分:0)
枚举可以实现为char
,int
或unsigned int
,并留待实施。从警告中,您可以获得gcc编译器实现unsigned int
。