次のコードは、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「MSP430C / C ++コンパイラv4.0.0」であり、MISRAルールチェックが含まれています。