C and C++


LANG.STRUCT.EXCP.CATCH : Use of catch

要旨

The code contains a catch expression.

プロパティ

クラス名 Use of catch
日本語クラス名 Use of catch
クラス分類 スタイル (style)
ニーモニック LANG.STRUCT.EXCP.CATCH
カテゴリー
CWE CWE:396 Declaration of Catch for Generic Exception
CERT-CPP CERT-CPP:DCL57-CPP Do not let exceptions escape from destructors or deallocation functions
  CERT-CPP:ERR61-CPP Catch exceptions by lvalue reference
JSF++ JSF++:208 C++ exceptions shall not be used (i.e. throw, catch and try shall not be used.)
対応言語 C++ のみ利用可能です。 C は利用できません。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっており、プロジェクトには非正規の C向けAST が必要になります。有効にするにはプロジェクト設定ファイル (configuration file) に以下の WARNING_FILTER ルールと RETAIN_UNNORMALIZED_C_AST 設定を追加してください。
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Use of catch"
注:非正規化された AST を継続して使用した場合、使用ディスク容量が増加し解析時間が長くなる可能性があります。

#include <stdexcept>

int might_throw_something(int x);

int f_catch_stmt(int i){
  int j;
  try {
    j = might_throw_something(i);
  }
  catch (std::logic_error& e){       // 'Use of catch' warning issued here
    // handle std::logic_error
  }
  catch (std::exception& e){         // 'Use of catch' warning issued here
    // handle std::exception other than std::logic_error
  }
  catch (...){                       // 'Use of catch' warning issued here
    // handle all other types
  }
  // may do more computation for j
  // ...
  return j;
}

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

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