C言語プリプロセッサ定義に基づく解析

Understand では、#ifdef 等のプリプロセッサ定義により、マクロ有無を判定し、マクロが有効なコード部分に対して解析をおこないます。
下記の機能などで、#ifdef 等を認識した解析結果を確認することができます。

  • グラフィカルビュー
    Control Flow グラフや Calls グラフなどのグラフィカルビューは、有効行に対して生成します。
  • ソースエディター
    Understand のソースエディターでは、初期の設定では、マクロが無効なコード部分 (非アクティブ行) をピンク色の背景色で表示し、マクロが有効なコード部分 (アクティブ行) を白色の背景色で表示します。ソースエディター上からもマクロの有効/無効行を識別することができます。  
  • ソースエディター上で、コードを右クリックしてコンテキスト メニュー[非アクティブ行の非表示] をクリックすると、 プリプロセッサマクロが定義されていないアクティブではない行を隠すことができます。
    すべてのコード行を再び表示するには、[非アクティブ行の表示] を選択します。
  • メトリクス
    メトリクスの計測は、#if, #ifdef を考慮して考慮して計測されます。
    例えば、CountStmt や CountLineComment、Cyclomatic などのメトリクスも有効な行だけを計測します。
    また、マクロが無効なコード部分 (非アクティブ行) をカウントするメトリクス「CountLineInactive」もあります。

#ifdef~#endif などのマクロ定義は、マクロを手動で設定する方法としては、メニュー[プロジェクト]-[マクロ/インクルードの設定]-[未定義マクロ]から設定します。
または、メニューから[プロジェクト]-[プロジェクトの設定]-[C++]-[マクロ]から設定します。

  • 「未定義マクロ」ボタンをクリックし、未定義マクロを検索し、マクロを定義することができます。
  • 「新規」ボタンをクリックして、マクロの設定をおこないます。
    #define の記載は必要ありません。マクロ名とその定義を設定します。
  •  「インポート」ボタンからマクロ定義のリストファイルをインポートすることも可能です。
    ファイルには 1 行につき 1 つのマクロ定義を記述します。
    1 桁目が # 記号の行は、コメント行を表します。
    マクロ名と定義の間は等号 (=) で区切ります。
    例:DEBUG=true

また、[プロジェクト]-[プロジェクトの設定]-[ファイル]カテゴリを選択して表示されるファイルツリーの各ディレクトリや、ファイルを右クリック
[オーバーライドの設定]-[C++マクロ]で設定することもできます。


Understand のマクロ定義で、優先度の低いものから順に挙げると、次のようになります。

  1. 組み込み言語マクロ (__FILE__ など)
    C/C++ のコンパイラにあらかじめ定義されている ANSI C マクロを指します。__LINE__ や __DATE__ などです。
  2. コンパイラ構成ファイル
    コンパイラ構成ファイルは、[プロジェクト]-[プロジェクトの設定]-[C++]-[オプション]-[コンパイラ]で選択されたコンパイラの定義ファイルを指します。

    各コンパイラ定義ファイル(*.cfg)は、Understandのインストールディレクトリに配置されています。
    %Understandインストールディレクトリ%confunderstandcompilers
    例)C:Program FilesSciToolsconfunderstandcompilers

  3. 同期された Visual Studio プロジェクトのマクロ定義
    Visual Studio プロジェクトファイルをインポートし、プロジェクトを作成する場合に、VS の /D オプションで定義されているマクロを指します。
  4. コンパイラ定義の未定義マクロ
    [プロジェクト]-[プロジェクトの設定]-[C++]-[マクロ]-[未定義]で定義したマクロ
  5. プロジェクト定義 ([マクロ] カテゴリ)
    [プロジェクト]-[プロジェクトの設定]-[C++]-[マクロ]で定義したマクロ
  6. und コマンド ラインの settings を使用した定義
    settings -C++MacrosAdd MYLONG=”Long Text” 等のコマンドで、udb ファイルに、マクロを設定した場合
  7. ソース ファイルの定義 (ソース ファイルの #define / #undefine)
    ソース ファイル上に記載されている #define / #undefine によるマクロ定義

是非、ご活用ください。

タイトルとURLをコピーしました
Close Bitnami banner
Bitnami