よくある質問(FAQ)

MISRA-Cの解析において、シフト演算処理の前にシフト値のチェックを行っているにも係わらず、違反(チェックをしていない)が報告されます。

MISRA-C解析について

質問

MISRA-Cの解析で、シフト演算処理の前にシフト値のチェックを行っているにも係わらず、違反(チェックをしていない)が報告されます。なぜですか?

回答

この問題は、シフト値を指定する変数が構造体メンバーの場合などのとき発生します。

■ 例
if ( pStrPtr->shiftBit >= 0 && pStrPtr->shiftBit < 32 )  // シフト値チェック
{
 data >> pStrPtr->shiftBit;  // シフト操作
}

上記 例の場合、ポインタ参照にてシフト前の確認が行われていますが、CasePlayer2はエラーの可能性があるものとして扱われ「MISRA-C 2004」ではルール番号[12.8]「MISRA-C 1998」ではルール番号[38]の違反になります。これはCasePlayer2の解析エンジンの機能制限の1つです。

この様な違反に対して、MISRA-C解析機能には、エラーとして出力するかどうかの解析判断に設定があります。

CasePlayer2の設定タブの、「MISRA-C解析」の中にある
「プログラム動作上問題になる可能性があるものを指摘する」
をONにしていた場合、プログラム動作上問題になる可能性がある記述と解析にて判断が行われた場合には、エラーを出力します。このオプションは、現在のMISRA-C解析エンジンにより、明確にエラーと判断できないものの場合に、エラーとして扱うか否かを設定するものです。本件のエラーは、上記の設定オプションをOFFにして頂くと、エラーを表示しません

ただし、可能性としましては、問題を起こす可能性がある場合でもエラーを出さない結果となるため、デフォルトではこのオプションがONになっています。

運用方法としましては、上記の通りOFFで運用頂きエラーを排除するか、ONのままで運用頂き、出力されたエラーにつきましては、ユーザーにご判断頂く方法となります。

なお、マニュアルからの抜粋ですが、このオプションの説明を下に添付いたします。

■ CasePlayer2 ヘルプマニュアルより
プログラム動作上問題になる可能性があるものを指摘する

下記のルールに関して、プログラム動作上問題になる可能性がある記述についてメッセージを出すかどうかを指定できます。一つのルールでプログラム動作上問題になる可能性がある記述と明確に問題がある(または明確に違反がある)記述があるルールのみ、この指定で制御できます。

《MISRA-C:1998でこのオプションが適用されるルール》

ルール4
ルール30
ルール38
ルール114

《MISRA-C:2004でこのオプションが適用されるルール》

ルール9.1
ルール12.8
ルール17.1
ルール17.2
ルール17.3
ルール17.4
ルール20.1
ルール21.1