c语言中的枚举?它们可以用来储存吗
我试图找出如果枚举中有2个变量会发生什么 我给它赋值。 我想了解一下,当我给c_类型赋值时,使用的是C1还是C2 我有以下代码:c语言中的枚举?它们可以用来储存吗,c,enums,enumeration,C,Enums,Enumeration,我试图找出如果枚举中有2个变量会发生什么 我给它赋值。 我想了解一下,当我给c_类型赋值时,使用的是C1还是C2 我有以下代码: typedef enum { C1 = 0, C2, } c_type; typedef struct A_a { c_type store; } A; FuncABC(int val) { A a1; a1.store = val; /here store has C1 and C2, which one gets use
typedef enum {
C1 = 0,
C2,
} c_type;
typedef struct A_a {
c_type store;
} A;
FuncABC(int val)
{
A a1;
a1.store = val; /here store has C1 and C2, which one gets used here?
}
请告诉我。我知道上面的代码在C语言中逻辑地工作。
但是,我想澄清一下作业。这是未定义的行为。代码最有可能导致崩溃,因为您正在取消对未初始化指针的引用。您混淆的是
a1。store
将存储C1
或C2
实际上,a1。存储
可以是C1
或C2
或2
或3
或255
或val
的任何值
回到C标准,enum
变量可以存储超出enum
类型值范围的值
您也可以参考此谢谢sam的回答。请帮我澄清一下枚举上的赋值操作。此赋值操作与任何其他赋值操作没有区别。它用一个新值替换某物的先前值。是的,但是,在哪个枚举中?C1还是C2?存储为C1和C2。只有一个枚举值。您将枚举与结构相混淆。枚举是一个别名。举例来说,枚举不是说这个整数的值只能是0、1或2,而是说这个整数的值只能是C1、C2或C3。使用C1、C2或C3与使用分配给每个枚举的基础整数值完全相同。谢谢,这是一个愚蠢的问题;)。我弄糊涂了。它将存储
val
的值。我知道,但它将存储在什么中?它将存储在a1中。存储在中。在C中,a1.store基本上是一个整数,你的枚举基本上是用一些额外的编译时间定义的,除非枚举值超过INTMAX(然后它是最小值的整数类型,它适合于最大值),或者使用编译器特定的“打包”属性。C++对Type Debug EnMs做了一些处理,如果某个东西传递了一个值1或0,它可能会给上面的赋值提供一个警告/错误。这就是为什么使用<代码>开关不一定没有意义的原因。(a1.store){case C1:…;case C2:…;default:…句柄超出范围…;}
即使不应执行default
case,如果val
不是枚举中的值,也可能会执行。