枚举变量初始化会导致错误

时间:2015-03-09 05:36:14

标签: c enums

如何初始化Enum变量? 例如:

enum RANK{First=1,Second,Third};

main()
{
    RANK r=0;
    int marks=0;
    printf("Enter the marks obtained\n");
    scanf("%d",&marks);
    if(marks>=90)
        r=First;
    else if(marks>=80)
        r=Second;
    else
        r=Third;
    printf("Rank=%d\n",r);
}

上面的代码给出了错误,告诉我不能用RANK中的整数值初始化枚举r = 0; 但我不明白为什么虽然枚举值是整数类型,但为什么会产生这个错误。

3 个答案:

答案 0 :(得分:4)

应该修改

enum的语法。

typedef enum {First=1,Second,Third} RANK;
RANK my_RANK = First;

如果您不想使用typedef,请使用此

enum RANK {First=1,Second,Third};
enum RANK my_RANK = First;

也可以像这样使用

enum { First=1,Second,Third } RANK = FIRST;

答案 1 :(得分:2)

正如其他人所指出的那样,错误似乎来自于枚举的错误使用。你要么必须声明一个枚举变量(sloppy style):

enum {First=1,Second,Third} rank;
...
rank = 0;

或更好,声明一个类型:

typedef enum 
{
  First=1,
  Second=2,  
  Third=3
} rank_t;
...
rank_t r = 0;

作为旁注,最好是如上所述明确初始化所有枚举常量,或者根本不初始化。


如果在修复上述问题后仍然遇到问题,可能会将编译器设置为在某些警告时出错。就C语言而言,初始化为0很好。但是一些好的编译器增加了类型安全性,并且只要你在枚举类型和int之间进行隐式转换就会发出警告。在这种情况下,rank_t r = (rank_t)0;应该解决它。

不知道你为什么要给枚举一个与其常数不对应的值,但这没有任何意义。

答案 2 :(得分:0)

enum RANK{First=1,Second,Third};

应该是

typedef enum {First=1,Second,Third} RANK;

使用类型RANK