有问题:
为什么在 C 中将枚举元素分配给相同的枚举变量类型时必须强制转换它?
由于未通过MISRA C 2012 规则 10.3 ,我遇到了此代码的问题,该规则指出:
不应将表达式的值分配给具有较窄基本类型或不同基本类型类别的对象
代码是这样的:
typedef enum
{
FLS_PROG_SUCCESS,
FLS_PROG_FAIL,
FLS_ERASE_SUCCESS2U,
FLS_ERASE_FAIL,
FLS_READ_SUCCESS,
FLS_READ_FAIL,
FLS_FORMAT_SUCCESS,
FLS_FORMAT_FAIL
}FLS_JobResult_t;
void Foo(void)
{
FLS_JobResult_t ProgramStatus;
/* Then I try to initialize the variable value */
ProgramStatus = FLS_PROG_SUCCESS;
...
}
我接受了一个暗示该工具可能存在缺陷的答案。我仍然相信,但在试图解决我为 typedef 枚举声明添加了一个名称时,现在是:
typedef enum FLS_JobResult_tag
{
FLS_PROG_SUCCESS,
FLS_PROG_FAIL,
FLS_ERASE_SUCCESS2U,
FLS_ERASE_FAIL,
FLS_READ_SUCCESS,
FLS_READ_FAIL,
FLS_FORMAT_SUCCESS,
FLS_FORMAT_FAIL
}FLS_JobResult_t;
据我所知,两者完全相同。但是,惊喜!错误消失了!规则检查器不再将其标记为错误!
然后做了一些研究,我发现了这两个问题:
和
我意识到匿名 enum和命名 enum之间存在细微差别。但是没有什么能说明规则检查员抱怨另一种形式的原因是什么。
所以问题是:匿名枚举与命名枚举有什么区别,可能会违反 MISRA c 2012 的规则 10.3?