以下代码在 MISRA 检查中失败。具体的错误信息是:
(MISRA-C:2004 10.1/R) 如果整数类型表达式的值不是转换为具有相同符号的更广泛的整数类型,则它的值不应隐式转换为不同的基础类型
typedef enum _MyEnum { One, Two } MyEnum;
MyEnum MyVariable;
int foo(void)
{
int result = 1;
if (One == MyVariable) // fails here with MISRA-C:2004 10.1/R
{
result = 2;
}
return result;
}
- 为什么要转换逻辑表达式?
- 这里转换了什么?
One
当我交换和时,为什么代码通过 MISRA 检查MyVariable
?
编辑:编译器是 TI“MSP430 C/C++ Compiler v4.0.0”,包含 MISRA 规则检查。