C and C++


LANG.STRUCT.LOOP.MFTERM : 正しく記述されていないforループ終了条件節

要旨

for ループヘッダの2番目の終了条件節内の要素がループ内で変更されています。

プロパティ

クラス名 Malformed for-loop Condition
日本語クラス名 正しく記述されていないforループ終了条件節
クラス分類 スタイル (style)
ニーモニック LANG.STRUCT.LOOP.MFTERM
カテゴリー
MisraC2023 MisraC2023:14.2 A for loop shall be well-formed
Misra2012 Misra2012:14.2 A for loop shall be well-formed
Misra2004 Misra2004:13.5 The three expressions of a for statement shall be concerned only with loop control
  Misra2004:13.6 Numeric variables being used within a for loop for iteration counting shall not be modified in the body of the loop
AUTOSARC++14 AUTOSARC++14:M6-5-3 The loop-counter shall not be modified within condition or statement.
  AUTOSARC++14:M6-5-5 A loop-control-variable other than the loop-counter shall not be modified within condition or expression.
MisraC++2008 MisraC++2008:6-5-3 The loop-counter shall not be modified within condition or statement.
  MisraC++2008:6-5-5 A loop-control-variable other than the loop-counter shall not be modified within condition or expression.
MisraC++2023 MisraC++2023:9.5.1 Legacy for statements should be simple
JSF++ JSF++:201 Numeric variables being used within a for loop for iteration counting shall not be modified in the body of the loop.
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっており、プロジェクトには非正規の C向けAST が必要になります。有効にするにはプロジェクト設定ファイル (configuration file) に以下の WARNING_FILTER ルールと RETAIN_UNNORMALIZED_C_AST 設定を追加してください。
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Malformed for-loop Condition"
注:非正規化された AST を継続して使用した場合、使用ディスク容量が増加し解析時間が長くなる可能性があります。

void lang_struct_loop_mfterm(void){
    int i;
    int buf[10];

    for (i = 0; i < 10; i++){                    /* i not modified in loop body */
        buf[i] = 10;
    }

    for (i = 0; i < 10; i++){ /* 'Malformed for-loop Condition' warning issued here */
        buf[i++] = 10;
    }
}

関連のある設定ファイルパラメータ

設定ファイルの以下のパラメータがこのワーニングクラスのチェックに影響します。