MISRA C:2012 Dir 4.4
Sections of code should not be "commented out"
説明
命令の定義
Sections of code should not be "commented out" 1 .
根拠
/* */ で囲まれた C コメントは入れ子をサポートしていません。/* で始まるコメントは、*/ が後続の入れ子のコメントの末尾として意図されている場合でも先頭の */ で終わります。既にコメント アウトされているコードのセクションにコメントが含まれている場合は、コンパイル エラー (または少なくとも意図されたものより少ないコードのコメント アウト) になる可能性があります。
コードのコメント アウトはお勧めしません。コメント アウトされたコードは、コンパイル エラーにはならず、周囲のコードと非同期のままになる可能性があります。後で、そのコードのコメントを解除すると、予期せぬ問題が発生する可能性があります。
コメントは、コード自体では明らかでないコードの側面を説明するためにのみ使用してください。
Polyspace 実装
チェッカーは内部でヒューリスティックな方法を使用してコメントアウトされたコードを検出します。たとえば、#、;、{、} などの文字はコードを含む可能性があるコメントを示します。このようなコメントは他のメトリクスに対して評価されて、コメントになりすましたコードである可能性を判断します。たとえば、数個の単語が間に記号をはさまずに連続していれば、この可能性は減少します。
チェッカーは、コードを含んでいても次のコメントに対してはフラグを設定しません。
/**、/*!、///、または//!で始まる doxygen コメント。同じ記号を 5 回を超えて繰り返しているコメント。たとえば、次の場合の
=記号。/* ===================================== * A comment * =====================================*/
ファイルの最初の行のコメント。
C スタイル (
/* */) と C++ スタイル (//) が混在したコメント。1 つ以上の
@記号が含まれるコメント。コードを含む入れ子のコメントに@記号が配置されている場合、Polyspace® はこれにフラグを設定します。次に例を示します。上記のコードで、Polyspace はコメント アウトされたint* q; //@Error int foo(void); //... void bar(void){ /* int*p = (int*) malloc(int); // Error @allocation */ }malloc演算を含む 2 番目のコメント ブロックにフラグを設定し、最初のコメントを無視します。
チェッカーは、このようなコメントがドキュメンテーション目的か、または事前に考慮されたうえで意図的に入力されたものと見なします。
トラブルシューティング
ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。
例
チェック情報
| グループ: Code design |
| カテゴリ: 推奨 |
| AGC カテゴリ: 推奨 |
バージョン履歴
R2020b で導入1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.
The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:
MISRA C:2004
MISRA C:2012
MISRA C:2023
MISRA C++:2008
MISRA C++:2023
MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.