【发布时间】:2012-05-14 11:34:01
【问题描述】:
以下代码在 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和MyVariable时,为什么代码通过了 MISRA 检查?
编辑:编译器是 TI“MSP430 C/C++ Compiler v4.0.0”,包含 MISRA 规则检查。
【问题讨论】:
-
我已经对这个 MISRA 东西有不好的看法。你所做的一切都很好。
-
我支持编译器错误假设
-
它是否对
if (MyVariable == One) {}产生相同的错误/警告? -
@wildplasser 请阅读我的问题的最后一句话。
-
糟糕。我只阅读代码,所以看起来;-)