提问人:Anirudh _k 提问时间:11/12/2021 最后编辑:NimanthaAnirudh _k 更新时间:3/30/2022 访问量:1659
C 警告:枚举类型与另一种类型混合
C warning : enumerated type mixed with another type
问:
我有一个这样的枚举定义 -
typedef enum
{
emp1 = 0u,
emp2,
emp3
}employid;
C 会向我抛出以下操作的警告
问题 1:
unsigned int var; // 32 bit in my compiler
typedef struct
{
employid e;
}mystruct;
mystruct s;
s.e = var; // **getting warning enumerated type mixed with another type**
问题 2:
somefun(var); // **getting warning enumerated type mixed with another type**
function definition is somefun(employ e);
我不明白,即使我的枚举值是正的,因为第一个元素是 0u,为什么 C 编译器对我大喊大叫将其分配给无符号 int?
答:
1赞
Lundin
11/12/2021
#1
就 C 语言规则而言,您的代码很好。这些只是额外的诊断,告诉您代码是可疑的。
可能保存的值与任何有效的枚举常量都不匹配,在这种情况下,您最终将保留一个无效的值。也就是说:大多数时候,将纯整数与枚举混合没有任何意义。如果您发现自己这样做,那么根本问题可能出在程序设计级别。unsigned int
s.e
如果您确定它持有 ok 值,您可以进行显式强制转换。但更有可能的是,应该首先宣布。var
s.e = (employid)var;
var
employid
评论
0赞
Anirudh _k
11/15/2021
嗨,所以问题来了,因为我存储了我的变量,它是枚举的一部分,并在多个函数调用之间传递它。因此,s.e=var 给出错误,尽管它从传递的地方传递的函数已将其声明为枚举的一部分。奇怪
评论
var