如何为枚举变量赋予枚举

时间:2014-07-29 12:17:23

标签: c enums lint

我在C中有以下代码:

typedef enum
{
   MONDAY = 0,
   TUESDAY,
   WEDNESDAY
} Weekday;

typedef struct
{
   int age;
   int number;
   Weekday weekday;
} Info;

typedef struct
{
   int age;
   Weekday weekday;
} Data;

Info info;
Data data;
info.weekday = data.weekday;

lint给出以下错误:

info.weekday = data.weekday; Type mismatch (assignment) (enum/enum)

如何将枚举分配给另一个枚举变量?

2 个答案:

答案 0 :(得分:0)

在这里用逗号替换分号:

MONDAY = 0;

如果仍有错误,则需要显示更多代码。

编辑:我的错,不知道" lint"。

似乎皮棉有点过于偏执。这种任务不可能出错。正如AnthonyLambert所说,只是禁用此错误(或者不使用lint?)。

我能想到的最后一招,但是我不会赌它,就是命名你的枚举:

typedef enum Weekday
{
    //...
} Weekday;

您拥有的最后一个选项(我不建议使用)是在您的结构中使用int:

typedef struct
{
    // ...
    int weekday;
} Info;

然后您可以为这些变量分配枚举器。

答案 1 :(得分:0)

您的代码不正确,它只是lint指出潜在的错误。如果使用C ++编译器编译,它将保留类型信息,则不会显示此错误。

问题是,只要你分配一个枚举值,就会在C中变成一个int类型。 所以,一旦你从平日阅读它的类型现在是int而不是工作日。

通过编码来解决lint中报告的错误的方法是强制它再次从枚举中分配。

void SetWeekday( Info *info, Data* data )
{
     switch (Data->Weekday)
     {
         case MONDAY: info->Weekday = MONDAY;
         case TUESDAY: info->Weekday = TUESDAY;
         etc...
     }
}

或者lint允许你单独禁用每个错误,这可能是最好的。

(此代码尚未编译,可能包含坚果和/或小昆虫等。)