C and C++


LANG.STRUCT.SE.DEC : デクリメント演算子を含む式の副作用

要旨

前置デクリメントもしくは後置デクリメントを含む式が副作用を含んでいます。

このチェックの目的は以下の通りです。

プロパティ

クラス名 Side Effects in Expression with Decrement
日本語クラス名 デクリメント演算子を含む式の副作用
クラス分類 スタイル (style)
ニーモニック LANG.STRUCT.SE.DEC
カテゴリー
MisraC2023 MisraC2023:13.3 A full expression containing an increment (++) or decrement (--) operator should have no other potential side effects other than that caused by the increment or decrement operator
Misra2012 Misra2012:13.3 A full expression containing an increment (++) or decrement (--) operator should have no other potential side effects other than that caused by the increment or decrement operator
Misra2004 Misra2004:12.13 The increment (++) and decrement (--) operators should not be mixed with other operators in an expression
AUTOSARC++14 AUTOSARC++14:M5-2-10 The increment (++) and decrement (--) operators shall not be mixed with other operators in an expression.
MisraC++2008 MisraC++2008:5-2-10 The increment ( ++ ) and decrement ( -- ) operators should not be mixed with other operators in an expression.
CERT-C CERT-C:EXP30-C Do not depend on the order of evaluation for side effects
  CERT-C:PRE31-C Avoid side effects in arguments to unsafe macros
CERT-CPP CERT-CPP:EXP50-CPP Do not depend on the order of evaluation for side effects
JPL JPL:19 Do not use expressions with side effects.
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっており、プロジェクトには非正規の C向けAST が必要になります。有効にするにはプロジェクト設定ファイル (configuration file) に以下の WARNING_FILTER ルールと RETAIN_UNNORMALIZED_C_AST 設定を追加してください。
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Side Effects in Expression with Decrement"
注:非正規化された AST を継続して使用した場合、使用ディスク容量が増加し解析時間が長くなる可能性があります。

int f(int x);

int lang_struct_se_dec(int a){
    int i;

    i = a--;                    /* 'Side Effects in Expression with Decrement' warning issued here */
    if (a){
      i--;                                                        /* no additional side effects */
    }
    a = f(--i);                 /* 'Side Effects in Expression with Decrement' warning issued here
                                 *  - a function call is always considered to be a side effect
                                 */
    if (a + f(1)){            
        i = (1 == 1) ? 2 : a--; /* 'Side Effects in Expression with Decrement' warning issued here
                                 * - even though the decrement will not be executed
                                 * ('Unreachable Computation' warning also issued here)
                                 */
    }
    return i + a;
}

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

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