枚举变量初始化导致错误

Enum variable initialization results in error

如何初始化枚举变量? 例如:

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);
}

上面的代码报错说enum不能用RANK r=0中的整数值初始化; 但是我不明白为什么枚举值是整数类型时会产生这个错误。

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

应该是

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

使用类型RANK

应修改枚举的语法。

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;

正如其他人所指出的,错误似乎是由于枚举的不正确使用引起的。您要么必须声明一个枚举变量(草率风格):

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;应该可以解决。

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