C and C++


LANG.STRUCT.SE.SWITCH : Too Many Side Effects in Switch

要旨

The controlling expression of a switch statement contains two or more side effects.

プロパティ

クラス名 Too Many Side Effects in Switch
日本語クラス名 Too Many Side Effects in Switch
クラス分類 スタイル (style)
ニーモニック LANG.STRUCT.SE.SWITCH
カテゴリー
JSF++ JSF++:204 A single operation with side-effects shall only be used in certain contexts.
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="Too Many Side Effects in Switch"
注:非正規化された AST を継続して使用した場合、使用ディスク容量が増加し解析時間が長くなる可能性があります。

extern int x, y;
extern int f(int);               /* Functions are assumed to have side effects unless
                                  * SIDE_EFFECT_FREE_FUNCTIONS specifies otherwise */

int too_many_side_effects_switch(void){
    switch (f(x)) {                                      /* only one side effect */
        case 1:
        case 2:
          return 5;
        default:
          ;
    }
    switch (f(y+=10)) { /* 'Too Many Side Effects in Switch' warning issued here */
        case 1:
        case 2:
          return 6;
        default:
          ;
    }
    return 7;
}

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

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