メインコンテンツ

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

ステートメントが複数存在する行

1 行に複数のステートメント

説明

この欠陥は、前処理が始まる前に、1 つの行でセミコロン (;) の後ろにテキストが続いていることが解析により検出された場合に発生します。コメント、for ループの定義、中かっこまたはバックスラッシュに関しては、欠陥は報告されません。

リスク

1 行につき 1 つのステートメントを使用すると、コードの可読性が向上します。コード内のほとんどのステートメントは新しい行に現れるので、この配置の中でごく少数の場合に 1 行に複数のステートメントを使用すると、コード レビューが難しくなる可能性があります。

修正方法

1 行につき 1 つのステートメントを記述します。

問題を修正しない場合は、改めてレビューされないように結果またはコードにコメントを追加します。詳細は、以下を参照してください。

すべて展開する

int multi_init(void){
int abc = 4; int efg = 0; //defect

    return abc*efg;
}

この例では、関数の 2 行目で abcefg が別々のステートメントとして初期化されています。

修正 — コンマ区切りの初期化

1 つの修正方法として、複数の変数を同じ行で宣言するために、セミコロンではなくコンマを使用することができます。

int multi_init(void){
    int a = 4, b = 0;

    return a*b;
}
修正 — 初期化ごとに新しい行を使用

1 つの修正方法として、それぞれの初期化を別々に行うことができます。b の初期化を次の行に置くことで、このコードでは欠陥が報告されなくなります。

int multi_init(void){
    int a = 4;
    int b = 0;

    return a*b;
}
int multi_loop(void){
    int a, b = 0;
    int index = 1;
    int tab[9] = {1,1,2,3,5,8,13,21};

    for(a=0; a < 3; a++) {b+=a;} // no defect

for(b=0; b < 3; b++) {a+=b; index=b;} //defect

while (index < 7) {index++; tab[index] = index * index;} //defect
    return a*b;
}

この例では、1 行でコーディングされた 3 つのループがあり、それぞれに複数のセミコロンがあります。

  • 1 番目の for ループに複数のセミコロンがあります。Polyspace® では for ループ宣言内に複数のステートメントがあっても欠陥とはみなされません。

  • Polyspace は 2 番目の for ループについては欠陥を報告します。これは for ループ宣言の後に複数のステートメントがあるためです。

  • while ループにも、ループ宣言の後に複数のステートメントがあります。Polyspace はこの行について欠陥を報告します。

修正 — ループ ステートメントごとに新しい行を使用

1 つの修正方法として、ループ宣言の後、各ステートメントに対して新しい行を使用することができます。

int multi_loop(void){
    int a, b = 0;
    int index = 1;
    int tab[9] = {1,1,2,3,5,8,13,21};

    for(a=0; a < 3; a++) {b+=a;}

    for(b=0; b < 3; b++){
      a+=b;
      index=b;
    }

    while (index < 7){
      index++;
      tab[index] = index * index;
    }
    return a*b;
}
int multi_if(void){

    int a, b = 1;
    if(a == 0) { a++;} // no defect 
else if(b == 1) {b++; a *= b;} //defect
}

この例では、2 つの条件付きステートメントifelse if があります。if 行では条件の後にステートメントが 1 つだけなので、欠陥は報告されません。else if 行では条件の後にステートメントが 2 つ続いているため、欠陥とみなされます。

修正 — 複数ステートメント条件に新しい行を使用

1 つの修正方法として、複数のステートメントを伴う条件に対して新しい行を使用することができます。

int multi_if(void){
    int a, b = 1;

    if(a == 0) a++;
    else if(b == 1){
      b++; 
      a *= b;
    }
}

結果情報

グループ: 適切な手法
言語: C | C++
既定値: オフ
コマンド ライン構文: MORE_THAN_ONE_STATEMENT
影響度: Low

バージョン履歴

R2013b で導入

すべて展開する