在C中为枚举值赋值

时间:2017-08-10 01:44:10

标签: c

将int赋给枚举类型是否合法,如c.color = 1所示? 我运行了这段代码,它似乎确实将c.color设置为BLUE,因为打印了BYE,但我想知道这是否真正正确地设置了枚举。

typedef enum {
   GREEN = 0,
   BLUE
}COLOR;

typedef struct{
    COLOR color;
}COLORS;

int main()
{
    COLORS c;
    c.color = 1;
    if(c.color == BLUE)
    {
       printf("BYE");
    }
}

4 个答案:

答案 0 :(得分:4)

import fs from 'file-system'; fs.writeFile('message.txt', 'Hello Node.js', 'utf8', (err) => { if (err) {console.log(err);} console.log('The file has been saved!'); }); 被视为整数类型。因此,您可以为具有enum类型的变量分配整数。

来自C standard的第6.2.5节:

  

16 An   枚举包含一组命名的整数常量值。每个不同的枚举构成不同的   枚举类型

     

17 char类型,有符号和无符号整数类型,和枚举类型统称为整数类型。   整数和实数浮点类型统称为实数类型   

答案 1 :(得分:1)

来自CPP Reference网站

  

每个枚举类型都与以下之一兼容:char,有符号整数   类型或无符号整数类型。它是实现定义的   type与任何给定的枚举类型兼容,但不管它是什么,   它必须能够表示该枚举器的所有值   枚举。

你应该很好地为枚举整数赋值。

答案 2 :(得分:1)

您可以通过这种方式设置枚举,但首选项只是使用“BLUE”而不是“1”。使用特定数字称为“幻数”,使代码更难理解和维护。当您直接使用枚举名称分配时,稍后返回代码的人(包括您自此之后的几周或几个月)将希望能够立即了解代码正在执行的操作,而无需查找“1”的含义。 / p>

使用这些小代码看起来简单直观,但是一旦你的代码中有很多文件和图层,编写可读的,易于理解的代码就会变得更加重要。

此外,如果您仍想使用该数字,则可以强制转换int,但也要确保正确输入。 e.g。

c.color = (COLOR)1;

答案 3 :(得分:0)

根据C99标准,枚举类型被视为整数类型:

  

类型char,有符号和无符号整数类型以及枚举类型统称为整数类型

该标准允许将整数赋值给枚举类型的变量,并指定编译器在发生这种情况时应发出警告:

  

实施可能会在许多情况下产生警告,其中没有一个被指定为本国际标准的一部分。以下是一些较常见的情况。

     

...

     

[when]赋值给枚举类型的对象,而不是通过赋值该类型的成员的枚举常量,或者具有相同类型的枚举对象,或者函数的值,返回相同的枚举类型(6.7.2.2)。