将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");
}
}
答案 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)。