如何在C语言中给枚举类型赋值?

4

我有一个枚举和一个这样定义的结构体:

typedef enum
{
   MONDAY = 1,
   TUESDAY,
   WEDNESDAY
} ThreeDays;

typedef struct
{
   int hello;
   ThreeDays day;
} Weekday;

static Weekday weekday = { 1, 2};

接着,我在lint中收到了以下错误:

Error 64: Type mismatch (initialization) (int/enum)

这个错误是什么原因造成的?我该如何纠正它?

你尝试过使用 static Weekday weekday = {1, MONDAY}; 吗? - sgarizvi
1
我在C语言中得到了这个警告,而不是在C++中,并且它不是一个错误。 - user707549
@ratzip 那么你的C编译器有问题,你使用的是哪个编译器? - nos
这不是编译器,而是“lint”。 - Barmar
你知道为什么要定义一个枚举吗? - iabdalkader
我愿意倾听,这就是为什么我犯了错误。 - user707549
4个回答

7

充分利用你的枚举类型:

static Weekday weekday = {1,TUESDAY};

Lint提示您有一个枚举,但既未传递枚举符号,也未传递兼容类型的强制转换(例如(ThreeDays)2)。

直接使用枚举符号即可避免这个警告。


1
从我使用枚举类型的经验来看,您似乎不想做您正在尝试的事情。它的整个用意就是将其看作一种类型。所谓类型是指某种值的顺序,这些值只是用整数值来表示。整数值只是区分不同类型的一种简单方式。
例如,您可以将它们用于一周中的每一天。
    Enum{
         monday,tuesday, ....
}

通常我使用它来为节点集合中使用的结构体命名,以便区分我的节点。
将枚举设置为特定数字有点违背了它的目的。因为你想要一个最终变量,所以你可以随时引用它。所以只需创建一个final int,以便在需要时获取该值即可。

-1

使用文本命名而不是数字:

use static Weekday weekday = { Mon , Tue , ... } ;

这没有任何意义。Weekday有一个名为hello的第一个字段,它是一个int而不是枚举。 - unwind

-3

你代码中的枚举拼写错误。

typedef enum
{
   MONDAY = 1,
   TUESDAY,
   WENDESDAY
} three;

工作中 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接