メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

MISRA C:2023 Dir 4.4

Sections of code should not be "commented out"

R2024a 以降

説明

命令の定義

Sections of code should not be "commented out".

根拠

/* */ で囲まれた C コメントは入れ子をサポートしていません。/* で始まるコメントは、*/ が後続の入れ子のコメントの末尾として意図されている場合でも先頭の */ で終わります。既にコメント アウトされているコードのセクションにコメントが含まれている場合は、コンパイル エラー (または少なくとも意図されたものより少ないコードのコメント アウト) になる可能性があります。

コードのコメント アウトはお勧めしません。コメント アウトされたコードは、コンパイル エラーにはならず、周囲のコードと非同期のままになる可能性があります。後で、そのコードのコメントを解除すると、予期せぬ問題が発生する可能性があります。

コメントは、コード自体では明らかでないコードの側面を説明するためにのみ使用してください。

Polyspace 実装

チェッカーは内部でヒューリスティックな方法を使用してコメントアウトされたコードを検出します。たとえば、#;{} などの文字はコードを含む可能性があるコメントを示します。このようなコメントは他のメトリクスに対して評価されて、コメントになりすましたコードである可能性を判断します。たとえば、数個の単語が間に記号をはさまずに連続していれば、この可能性は減少します。

チェッカーは、コードを含んでいても次のコメントに対してはフラグを設定しません。

  • /**/*!///、または //! で始まる doxygen コメント。

  • 同じ記号を 5 回を超えて繰り返しているコメント。たとえば、次の場合の = 記号。

    /* =====================================
     * A comment
     * =====================================*/

  • ファイルの最初の行のコメント。

  • C スタイル (/* */) と C++ スタイル (//) が混在したコメント。

  • 1 つ以上の @ 記号が含まれるコメント。コードを含む入れ子のコメントに @ 記号が配置されている場合、Polyspace® はこれにフラグを設定します。次に例を示します。

    int* q;
    //@Error int foo(void);
    //...
    void bar(void){
    	/*
    	int*p =  (int*) malloc(int); // Error @allocation
    	*/
    }
    上記のコードで、Polyspace はコメント アウトされた malloc 演算を含む 2 番目のコメント ブロックにフラグを設定し、最初のコメントを無視します。

チェッカーは、このようなコメントがドキュメンテーション目的か、または事前に考慮されたうえで意図的に入力されたものと見なします。

トラブルシューティング

ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。

すべて展開する

#include <stdlib.h>
/* =====================================
 * usage:print32_tInteger(); 
 * =====================================*/
int32_t getRandInt();
void print32_t(int32_t);

//Error@ int32_t val = getRandInt();
void print32_tInteger() {
    /* int32_t val = getRandInt(); //Noncompliant
     * val++;  // contact support @..
     * print32_t(val); */     
    print32_t(getRandInt());
}

この例には、コードを含む複数のコメントが含まれています。

  • 最初のコメント ブロックでは、関数 print32_tInteger() の使用についてドキュメント化しています。このコメントでは = 記号を 5 回を超えて使用しているため、Polyspace はこのコメントにフラグを設定しません。

  • 2 番目のコメントでは、コード内のエラーのソースについてドキュメント化しています。コードには @ 記号が含まれるため、Polyspace はこのコメントを無視します。

  • 3 番目のコメント ブロックでは、エラーが含まれる可能性のあるコードをコメント アウトしています。このコメントは何もドキュメント化しておらず、コンパイルからのコードを実行しているだけです。Polyspace はこのコード ブロックにフラグを設定します。@ 記号は入れ子のコメント内にあるため、Polyspace はこのコメントを無視します。

チェック情報

グループ: Code design
カテゴリ: 推奨
AGC カテゴリ: 推奨

バージョン履歴

R2024a で導入