見出し画像

MISRA C:2012 Directive解説(Dir 1.1)

記念すべき最初のガイドライン。
一番最初のガイドラインが一番なんのことかわからないと思ったのは私だけではないはず。

Dir 1.1
Any implementation-defined behaviour on which the output of the program depends shall be documented and understood
Category Required
Applies to C90, C99
C90 [Annex G.3], C99 [Annex J.3]
プログラムの出力が依存する処理系定義の動作は、文書化され、理解されなければならない

はい。いきなり意味不明です。
処理系定義動作ってのはわかりますね?
Annex J.3(C99)に記載されているらしいので一部抜粋します。
ISO/IEC 9899:1999は当然お持ちですよね?

J.3実装定義の動作
この節にリストされている各領域での動作の選択を文書化するには、準拠する実装が必要です。以下は実装定義です
J.3.1翻訳
-診断の識別方法
-改行以外の空白文字の空でない各シーケンスが保持されるか、翻訳フェーズ3で1つの空白文字に置き換えられるか

こちらもよくわかりませんね。要するに、コンパイラによって動作の異なることのリストです。google翻訳のおかげでわかりにくいですが、連続する空白文字は翻訳段階3で1つの空白文字に置き換えられるか、そのままかの2択だそうです。へえ。

処理系定義動作について理解したところで次に進みます。

プログラムの出力が依存する処理系定義の動作は、文書化され、理解されなければならない

太字部分です。Annex J.3に載っている処理系定義動作について、コンパイラはどのように動作するかを調べて、資料にまとめて、プロジェクトメンバーに共有してね。ということです。コンパイラマニュアルを隅々まで読んで調査しましょう。コンパイラのサポート(保守)があるならサポート丸投げが早いです。資料が完成すれば、このディレクティブには準拠していると言えます。資料はQACで警告が出たときに使うので、しっかり共有しましょう。

■MISRA Cってコーディングルール集?
はい。そのとおりです。
ただ、コーディングルールとはちょっと違うものも含まれています。
これが今回のDir 1.1。Directiveってのは指針と訳せます。コーディングをする上での指針について書かれている項目が存在します。MISRA C:2012はこのDir x.xが最初に載っています。
いきなりルールを乗せるんじゃなくて、こういう指針でコードを書くべきですよと指針を示してくれているのですね。(余計なお世話...)

■QACではどのように検出されるか
QACではDir1.1に関する警告がそこそこ存在します。
処理系定義動作に関わるコードに対しての警告が出力されます。警告が出ているからと言ってコードを修正する必要はありません。まずは処理系定義動作の資料を確認し、該当する処理系定義を読みましょう。その動作について自分の考えていた動作と同じであれば問題ありません。違う場合はコードの修正が必要かもしれません。コード修正が発生することは珍しいですが、発生した場合は結構大変です。

■さいごに
QACも全能ではないので、全ての処理系定義に警告を出してくれるわけではありません。でも安心してください。資料化され共有してあればいいのです。Directive系のガイドラインはだいたいこんな感じの、ツールでコーディング規約違反を見つけるのとは別の作業が必要になります。

[eof]

この記事が気に入ったらサポートをしてみませんか?