C and C++


LANG.STRUCT.LOOP.MFINIT : 正しく記述されていないforループ初期化節

要旨

for ループヘッダの最初の初期化節が 以下のいずれの形式にも該当しません。

プロパティ

クラス名 Malformed for-loop Initialization
日本語クラス名 正しく記述されていないforループ初期化節
クラス分類 スタイル (style)
ニーモニック LANG.STRUCT.LOOP.MFINIT
カテゴリー
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:A6-5-4 For-init-statement and expression should not perform actions other than loop-counter initialization and modification.
MisraC++2008 MisraC++2008:6-5-3 The loop-counter shall not be modified within condition or statement.
MisraC++2023 MisraC++2023:9.5.1 Legacy for statements should be simple
JSF++ JSF++:198 The initialization expression in a for loop will perform no actions other than to initialize the value of a single for loop parameter.
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっており、プロジェクトには非正規の C向けAST が必要になります。有効にするにはプロジェクト設定ファイル (configuration file) に以下の WARNING_FILTER ルールと RETAIN_UNNORMALIZED_C_AST 設定を追加してください。
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Malformed for-loop Initialization"
注:非正規化された AST を継続して使用した場合、使用ディスク容量が増加し解析時間が長くなる可能性があります。

void f(void);

int lang_struct_loop_mfinit(void){
  int i=0;
  int j;
  int rv=0;

  for (; i < 10; i++){ rv++; }                                   /* first permitted form */

  for (i = 0; i < 10; i++){ rv++; }                              /* second permitted form */

  for (int k = 0; k < 10; k++){ rv++; }                          /* third permitted form */
  
  for (i=0,j=1; i == j; i++){ rv++; }    /* 'Malformed for-loop Initialization' warning issued here */
  
  for (f(); i < 10; i++){ rv++; }        /* 'Malformed for-loop Initialization' warning issued here */

  return rv;
}

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

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