• Imagix 4D ユーザガイド
  • 目次

アナライザの構文とオプション(C / C++)

Imagix 4D の C / C++ 向けアナライザは、単独で動作する実行ファイルであり、Imagix 4D のデータベースおよびユーザ・インターフェイスから独立しています。また、この実行ファイルは ../imagix/bin ディレクトリに格納されており、次の構文を使用します。

imagix-csrc [option...] file...

option には、imagix-csrc のオプション(以下で説明)を1つ以上指定することができ、また file にも1つ以上のソースファイルをフルパス名で記述します。これらのファイルは、関連するソースファイル .c および .cpp であることが多いです。解析の対象となる file のリストで直接ヘッダファイルを指定することもできますが、通常これらは解析対象のソースコードに記述されている #include "filename" プリプロセッサ・ディレクティブの結果として解析されます。

Imagix 4D アナライザがサポートするオプションは以下の通りです。

-1prog:   すべてのソースコードを同一の実行ファイルから取得するものとして処理します。

多くの [フローチェック] レポートの基礎となるデータフロー解析では、すべてのソースコードを単一のプログラムから取得する必要があります。-1prog オプションを指定することでアナライザは、あらゆるソースコードを同一の実行ファイルから取得するものとして処理します。またグローバル名が一致するものはすべて、同じオブジェクトを参照するものと見なされます。

オプションは [データソース] ダイアログの [オプション] タブで、解析オプションの1つとして選択します。

-asm:   キーワード "asm" の使用をサポートします。

ある特定のコンパイラは、C / C++ ソースファイルに記述されている、インライン・アセンブラのコードに対応しています。これは、さまざまな言語構成要素を利用することで実現しています(ユーザガイド 「言語拡張」のページを参照)。キーワード "asm" は通常、このような言語構成要素の始まりを示すために使用されます。アナライザはこれら一部のインライン・アセンブラの言語構成要素を自動的に処理する一方で、-asm オプションを指定することにより、その他の言語構成要素が含まれるコードを処理する、という問題を回避することが可能となります。

このオプションは、[データソース] ダイアログの [ソースファイル] タブにある [PPフラグ] フィールドに追加するか、コンパイラ設定ファイルもしくは Makefile に記述します。

-at:   キーワード "@" および "_at_" の使用をサポートします。

特定のコンパイラは、メモリ上に変数の物理的な配置を指定する、非標準のキーワード "@" および "_at_" に対応しています。この言語拡張では Imagix 4D のコンパイラ設定ファイルに記述する通常の "#define keyword " ディレクティブの使用をサポートしていません。-at オプションによりアナライザは、問題を回避するため、キーワード "@" および "_at_" が記述されたコードを処理することが可能となります。

このオプションは、[データソース] ダイアログの [ソースファイル] タブにある [PPフラグ] フィールドに追加するか、コンパイラ設定ファイルもしくは Makefile に記述します。

-c11:   C++ 2011の言語拡張機能をサポートします。

一部のコンパイラの最新バージョンでは、 C++ 2011標準の言語拡張機能の多彩なサブセットに対応し始めています。このオプションを指定することで、一連の拡張機能をすべてサポートすることが可能です。

このオプションは、[データソース] ダイアログの [ソースファイル] タブにある [PPフラグ] フィールドに追加するか、コンパイラ設定ファイルもしくは Makefile に記述します。

-c11k:   C++ 2011の代替演算子表記の使用をサポートします。

一部のコンパイラの最近のバージョンでは、C++ 2011標準の代替演算子表記をサポートしています。例えば、「and」は「&&」、「bitor」は「|」、「not_eq」は「!=」の代わりに使用されます。これらの代替表記をサポートしていないコンパイラ向けに書かれたコードでは、これらの表記が識別子として使用されることがあります。このような場合に柔軟性を提供するため、代替表記のサポートは一般的なC++ 2011言語拡張から分離されています。このオプションを -c11 と組み合わせて使用すると、拡張機能の完全なセットをサポートします。

このオプションは、[データソース] ダイアログの [ソースファイル] タブの [PPフラグ] フィールドに追加するか、コンパイラ設定ファイルまたはMakefileに指定することができます。

-cdyn:   Dynamic C 言語をサポートします。

Dynamic C は C 言語を正規に改良したもので、Rabbit ハードウェア用のクロスコンパイラである Digi International / Rabbit / Z-World でサポートされています。-cdyn オプションにより、アナライザは Dynamic C の構文と意味を認識しサポートすることが可能となります。

このオプションは、[データソース] ダイアログの [ソースファイル] タブにある [PPフラグ] フィールドに追加するか、コンパイラ設定ファイルもしくは Makefile に記述します。

-cfrontpt:   Cfront のパラメータ化されたテンプレート・ディレクティブをサポートします。

Cfront コンパイラは、特殊なディレクティブである PT_names、 PT_define、そして初期の C++ テンプレートの一種として PT_end をサポートしていました。-cfrontpt オプションによりアナライザは、これらのディレクティブを認識しサポートすることができます。

このオプションは、[データソース] ダイアログの [ソースファイル] タブにある [PPフラグ] フィールドに追加するか、コンパイラ設定ファイルもしくは Makefile に記述します。

-cmmdFilename   Filename からコマンドを追加します。

imagix-csrc ソースアナライザは、コマンドラインで実行します。-cmmd は、コマンドライン・オプションを間接的に指定するオプションです。Filename に記述されたオプションはすべて、コマンドラインで指定したオプションに追加されます。Filename が複数行から成る場合、imagix-csrc は Filename 記述されている次の各行から、毎回オプションと一緒に、複数回起動するかのように動作します。

-cpascii:   ASCII のコードページとして、マルチバイト文字のソースファイルを解析します。
-cpeuc:   EUC のコードページとして、マルチバイト文字のソースファイルを解析します。
-cpsjis:   SJIS のコードページとして、マルチバイト文字のソースファイルを解析します。
-cputf8:   UTF-8 のコードページとして、マルチバイト文字のソースファイルを解析します。

デフォルト設定の imagix-csrc ソースアナライザは、汎用的なマルチバイト文字のコードページをサポートします。これは、大半のマルチバイト文字のソースファイルで機能します。汎用的にサポートされない特異なファイルに対して、これらの -cpxxx を使用することで、imagix-csrc は特定のコードページの規格をサポートすることが可能となります。-cpxxx オプションは1つだけ指定してください。

このオプションは、[データソース] ダイアログの [ソースファイル] タブにある [PPフラグ] フィールドに追加するか、コンパイラ設定ファイルもしくは Makefile に記述します。

-cwdDirname   解析用のカレントディレクトリを Dirname に設定します。

imagix-csrc ソースアナライザは -I、-S、-H、-R オプションと同様にソースファイルの相対パスを認識します。これらのパスはカレントディレクトリを基準としており、デフォルトはソースアナライザを起動したディレクトリになります。-cwd オプションは、相対パスの開始ディレクトリを変更します。

このオプションは Makefile で使用するか、ソースアナライザを他のコマンドラインで起動する場合に限り、使用してください。

-cpp:   .c ファイルを C++ ファイルとして解析します。

本来、拡張子が .c のファイルは C 言語の規則に従い解析されます。また、C++ の拡張子(.C /.cc、.cpp など )のファイルは、 C++ 言語の規則に従い解析されます。-cpp オプションは、C++ 言語の規則を .c のファイルに適用します。

このオプションは [データソース] ダイアログの [オプション] タブにある、解析オプションの1つとして選択します。

-Dmacroname[=value]:   マクロ macroname を定義します。

このオプションはコンパイラのオプション -D と同一です。マクロの置換は、アナライザによるソースコードの前処理の一環となります。マクロが定義されていると、存在する識別子 macroname はすべて、トークン value に置換されます。value が指定されていない場合は、デフォルト値の 1 が設定されます。

このオプションは [データソース] ダイアログの [ソースファイル] タブにある [PPフラグ] フィールドに追加するか、Makefile に記述します。また、Windows 版のアナライザも /D を認識します。

マクロは、同義となる #define プリプロセッサ・ディレクティブを追加することによって、コンパイラ設定ファイルでも定義することが可能です。仮引数を持つマクロに関しては、コンパイラ設定ファイルを使用する場合に限り、サポートされます。このようなマクロの場合、コマンドラインのオプションとして "-DFOO(x)" を使用するのではなく、設定ファイルに "#define FOO(x)" を追記する必要があります。

-dotnetfuncs:   #import および #using を通して検出された関数の宣言を生成します。

Microsoft Visual C++ では、特殊なディレクティブがバイナリファイルにあるシンボルの定義にアクセスします。#import ディレクティブは、タイプライブラリ・ファイルに存在する COM 型の定義にアクセスします。#using ディレクティブは、.NET フレームワークの共通言語ランタイム(CLR: Common Language Runtime)のコンポーネントの環境下において、コンパイルされたファイルに存在するシンボルの定義にアクセスします。Windows 版の imagix-csrc は、参照されたバイナリのタイプライブラリおよび .NET CLR ファイルを解析し、これらのファイルに記述されるシンボルの宣言を示す .inc ファイルを生成します。デフォルトでは、これらの生成された .inc ファイルに、関数の宣言は含まれません。-dotnetfuncs オプションを使用することで、その他の宣言とあわせて、関数の宣言を .inc ファイルにインクルードします。

このオプションは、[データソース]ダイアログの [ソースファイル] タブにある [PPフラグ] フィールドで追加するか、あるいはコンパイラ設定ファイルまたはMakefileで指定することができます。

-encmac:   マクロに関する相互参照データを収集します。

imagix-csrc ソースアナライザはマクロを完全に展開し、マクロに隠ぺいされたシンボルの使用方法に関する情報を収集します。例えば、マクロの展開を介した関数の呼び出しは、[関数呼び出しツリー] で確認することが可能です。また、関数におけるマクロの使用は [マクロ] ビューの [関数呼び出し] で見て取ることができます。ただし、アナライザの動作がデフォルトの場合は、マクロの相互参照情報を記録しません。-encmac オプションは、この情報を生成します。この他の情報については、[マクロ] ビューの [関数呼び出し] や File Editor でハイライト表示されます。

このオプションは [データソース] ダイアログの [ソースファイル] タブにある [PPフラグ] フィールドに追加するか、コンパイラ設定ファイルもしくは Makefile に記述します。

-genflowDirname   ディレクトリ Dirname 内のファイルに、シーケンス図およびデータフローに関するデータを書き込みます。

アナライザは解析済みのソースコードの中に存在する、シーケンス図とデータフローに関するディスプレイとレポートを生成するためのデータを収集します。このフローデータは、エンティティ、関係、属性データが格納されているディレクトリとは別の場所にあるファイルに保存されます。-genflow オプションは、これらフローデータの格納場所を制御します。Imagix 4D でこのデータを検索するには、-genvdb データとして同じディレクトリのパスで(例: -genvdb データに並列するように)、cfd という名前のディレクトリを検索先として指定する必要があります。-genflow が指定されない場合、フローデータは生成されず、くわえてフローチャート、データフロー、シーケンス図、一部のレポートも作成されません。

このオプションはデータソースを追加することで自動的に適用されます。

-genqcfDirname   ディレクトリ Dirname 内のファイルに品質管理データを書き込みます。

アナライザはソースコード・チェックを実行し、解析済みのソースファイルに記述されたシンボルに関するメトリクスを収集します。この品質管理データは、エンティティ、関係、属性データが格納されているディレクトリとは別の場所にあるファイルに保存されます。-genqcf オプションは、これら品質管理データファイルの格納場所を制御します。Imagix 4D でこのデータを検索するには、-genvdb データとして同じディレクトリのパスで(例: -genvdb データに並列するように)、qcm という名前のディレクトリを検索先として指定する必要があります。-genqcf が指定されない場合、品質管理データは生成されず、くわえて特定のメトリクスおよびレポートが作成されません。

このオプションはデータソースを追加することで自動的に適用されます。

-genvdbDirname   ディレクトリ Dirname 内のデータファイルに、解析結果を書き込みます。

アナライザは、明示的に解析された各ソースファイルのエンティティ、関係、属性データを生成し、ヘッダファイルはそれぞれ直接的あるいは間接的に、これらのソースファイルによってインクルードされます。ただし、システム・インクルード・ディレクトリに格納されているヘッダファイルは、例外となる可能性があります(-S および -nosys オプションを参照)。

-genvdb が指定されると、各ソースファイルもしくはヘッダファイルのデータは、ディレクトリ Dirname 内で別々のファイルに格納されます。これにより増分解析が可能となり、これが推奨される解析方法となります。他に使用できるオプションは -o です。

このオプションはデータソースを追加することで自動的に適用されます。

-gnu:   GNU の言語拡張を有効にします。

GNU gcc および g++ コンパイラは、標準 C / C++ 言語に対するキーワードを使用した一部の拡張機能を認識します。これら拡張機能の大半は、GNU コンパイラ用のコンパイラ設定ファイルに記述する "#define keyword" ディレクティブによってサポートされます。しかし #defines に対応していない特定の拡張機能には、さらなるサポートが要求されます。このサポートを提供するのが、-gnu オプションです。

具体的に -gnu は、インライン・アセンブラコードを区別するキーワード "__asm"の使用、C のコードではキーワード "inline" の使用、C++ のコードではグローバル識別子すべてに対する "std::" の使用をサポートします。

このオプションは [データソース] ダイアログの [ソースファイル] タブにある [PPフラグ] フィールドに追加するか、コンパイラ設定ファイルもしくは Makefile に記述します。

-Hdirname   #include ファイルを、まず dirname で検索し、次にカレントディレクトリを検索します。

アナライザが #include "filename" プリプロセッサ・ディレクティブを認識すると、まず -H および -R オプションで指定された全ディレクトリで filename を検索します。filename が存在しない場合、アナライザは次にカレントディレクトリ(".")で filename を検索します。それでも filename を検出できない時は、アナライザは -I および -S オプションで指定されたディレクトリを検索します。#include "filename" の代わりに #include <filename> が使用されている場合、カレントディレクトリ(".")はスキップされます。

-H オプションで指定されたディレクトリは、オプションで指定された順序で検索されます。これらのディレクトリは、アプリケーション・インクルード・ディレクトリとして処理され、-I オプションで指定されたディレクトリと同じ動作となります。このようなディレクトリをシステム・インクルード・ディレクトリとして処理するには、-R オプションを使用してください。これによる影響については、-nosys オプションの説明を参照してください。

このオプションは、[データソース] ダイアログの [インクルードディレクトリ] タブにある -I、 -S Flags フィールドで指定するか、コンパイラ設定ファイルもしくは Makefile に記述します。Windows 版のアナライザも /H を認識します。

-incFilename   各ファイルの解析を開始するタイミングで Filename をインクルードします。

-inc オプションの使用は、解析対象の各ソースファイルの冒頭に #include <Filename> 行を追記することと同義です。このため、ファイル自体を修正することなく、ファイルの解析方法を変更することができます。

このオプションの主な用途は、コンパイラ設定ファイルのインクルードです。これらの設定ファイルはマクロとインクルード・ディレクトリの場所を定義し、Imagix 4D アナライザに対してコードをコンパイルする際に、通常使用するコンパイラをエミュレートさせることができます。

Filename は、[データソース] ダイアログの [ソースファイル] タブにある Comp/Trgt コンボ・ボックスで ../imagix/user/cc_cfg の中にあるファイルから選択します。

-Idirname   #include ファイルを検索するディレクトリのリストに dirname を追記します。

アナライザが #include "filename" プリプロセッサ・ディレクティブを認識すると、まず -H および -R オプションで指定された全ディレクトリで filename を検索します。filename が存在しない場合、アナライザは次にカレントディレクトリ(".")で filename を検索します。それでも filename を検出できない時は、アナライザは -I および -S オプションで指定されたディレクトリを検索します。#include "filename" の代わりに #include <filename> が使用されている場合、カレントディレクトリ(".")はスキップされます。

Imagix 4D アナライザが #include <filename> と #include "filename" を区別する唯一の目的は、カレントディレクトリを検索するか否かの判断です。インクルード・ディレクトリをシステム・インクルード・ディレクトリとして宣言するには、-Idirname ではなく -Sdirname を使用してください。これによる影響については、-nosys オプションの説明を参照してください。

このオプションは [データソース] ダイアログの [インクルードディレクトリ] タブにある [-I、-Sフラグ] フィールドで指定するか、コンパイラ設定ファイルもしくは Makefile に記述します。Windows 版のアナライザも /I オプションを認識します。

-keeplinks:   ディレクトリやファイルの実体として Unix のリンクを評価します。

一般的に Unix システムのリンクは、参照先にある実際のディレクトリやファイルに解決されます。このオプションを適用することで、リンクはディレクトリやファイルの実体とは別のものとして評価されます。

このオプションは [データソース] ダイアログの [ソースファイル] タブにある [PPフラグ] フィールドに追加するか、コンパイラ設定ファイルもしくは Makefile に記述してください。また Unix 版のアナライザでのみ使用することができます。

-kr:   C 言語の K&R スタイルをサポートします。

多くの場合 Imagix 4D アナライザは、ユーザが ANSI C 規格または、より古い K&R スタイルのどちらに準じるかを指定することなく、C コードを解析することが可能です。ところが特定の構成要素には、ANSI C 規格と K&R スタイルの間における動作の違いが、自動的に解決されないコメントがマクロに記述されています。アナライザはデフォルトで ANSI C 規格に対応していますが、このオプションを適用することで、K&R の仕様もサポートします。またこのオプションは、GNU コンパイラとの一貫性を保つため、-traditional として呼び出すことも可能です。

このオプションは [データソース] ダイアログの [ソースファイル] タブにある [PPフラグ] フィールドに追加するか、コンパイラ設定ファイルもしくは Makefile に記述します。

-lc:   ファイル参照時にファイル名を小文字に変換します。

Unix は大文字と小文字を区別しますが、Windows は区別しません。このため、Unix 環境で Windows のコードを解析する際に、問題が発生することがあります。例えば Windows のコードで、あるファイルにはプリプロセッサ・ディレクティブ #include <STDIO.H> が、これとは別のファイルに #include <stdio.h> が記述されているとします。これらのディレクティブは Windows 環境では同義となるので、両方のディレクティブに同一のファイル stdio.h がインクルードされます。

しかし、Unix 環境において、これらのディレクティブは別々のものとして認識されるのです。STDIO.H または stdio.h はどちらかが認識されず、 Windows のコードは適切に前処理されません。このような場合に -lc オプションを指定することで、アナライザにすべてのファイル参照を小文字に変換させることができます。-lc を使用すると、アナライザは stdio.h のインクルード・ディレクトリでディレクティブ #include <STDIO.H> を検索します。これにより #include <STDIO.H> と #include <stdio.h> は、Windows 環境と変わることなく同一のものとして認識されます。

Unix 環境で -lc オプションを使用する際は、必ず実際のディレクトリ名やファイル名を小文字に変換してください。

もちろん Imagix 4D は Windows および Unix の両環境に対応していますので、Windows 環境においても同様に、大文字と小文字の識別に関する問題が存在します。Imagix 4D のデータベースはファイル名の大文字と小文字を区別しますので、1つのファイルが異なる2つのファイルとしてデータベースに登録される可能性があります。例を挙げると、あるファイルが #include <stdio.h> と #include <STDIO.H> ディレクティブの両方からインクルードされた場合、データベースに2重に登録されることになります。Windows 環境で -lc オプションを適用することにより、このような大文字小文字の識別に関する問題を、効率的に解消することが可能です。

Windows 環境で -lc オプションを使用する場合は、特にファイル名を変更する必要はありません。

このオプションは Unix 環境では [データソース] ダイアログの [オプション] タブにある解析オプションの1つとして選択します。また Windows 環境では、データソースを追加すると自動的にこのオプションが適用されます。

-lci:   #include ディレクティブに対するファイル参照時に限り、ファイル名を小文字に変換します。

-lc オプションを使用すると、アナライザへ渡されるディレクトリ名とファイル名はすべて、小文字に変換されます。#include ディレクティブの名前のほかに、-lc オプションによって -H、-I -R、-S オプションで指定されたあらゆるディレクトリ名、および解析用にアナライザに渡されたソースファイル名も変換されます。このため Unix 環境では、ソースコードならびにヘッダファイルに至るまでの完全なディレクトリ構造を、小文字のディレクトリ名とファイル名で構成しなければなりません。

-lci オプションは #include ディレクティブ内の名前のみを変換します。このオプションは Windows のコードを Unix 環境に移行した場合や、Unix に既存の上位ディレクトリの文字を変更することが難しい場合に有用です。

このオプションは [データソース] ダイアログの [ソースファイル] タブにある [PPフラグ] フィールドに追加するか、コンパイラ設定ファイルもしくは Makefile に指定します。

-locals:   ローカル変数に関するデータを収集します。

ローカル変数は、定義されている関数によって設定されるか読み取り専用とされるため、通常、Imagix 4D アナライザはグローバル変数および静的変数に関するデータのみを収集します。つまりローカル変数は、ソフトウェアを理解する上において、あまり重要な要素ではないのです。しかし Class Coupling のような特定の品質メトリクスに関心がある場合など、状況によりローカル変数に関するデータを取得する必要が生じるかもしれません。このような場合に -locals オプションを使用することによって、ローカル変数の定義や使用方法に関するデータを、データファイルに追加することができます。

このオプションは [データソース] ダイアログの [オプション] タブにある解析オプションの1つとして選択します。

-mark:   あらゆるアナライザ・メッセージに "imagix: " を挿入します。

通常、アナライザのエラーメッセージには、エラー発生場所のファイル名が行頭に記述されますが、-mark オプションを使用することで、すべてのエラーメッセージの行頭に "imagix: " が挿入されます。Makefile でアナライザを実行中の場合など、エラーメッセージが他のメッセージに混入して標準エラー出力(stderr) されるようなケースに有用です。

このオプションは、[データソース] ダイアログの [ソースファイル] タブにある [PPフラグ] フィールドに追加するか、コンパイラ設定ファイルまたは Makefile に指定します。

-msc:   Microsoft 社の言語拡張機能を有効にします。

Microsoft 社の Visual C / C++ のコンパイラは、標準 C / C++ 言語に対する一部のキーワード拡張を認識します。これら拡張機能の大半は、コンパイラ用のコンパイラ設定ファイルに記述する "#define keyword" ディレクティブによってサポートされています。しかし #defines に対応していない特定の拡張機能には、さらなるサポートが必要となります。このサポートを提供するのが -msc オプションです。

Microsoft 社の Visual C++ において、キーワード _asm および __asm は、インライン・アセンブラコードのブロックの始まりを示します。キーワード _segment、__segment、_base、__base は、セグメント化されたメモリとオフセットを処理します。-msc を指定することにより Imagix 4D アナライザは、これらの言語拡張機能が使用されているソースコードを解析する際に生じる問題を、回避することができるのです。

-msc オプションは Microsoft 社の Visual C++ の COM プログラミングで、タイプライブラリと併用されるプリプロセッサ・ディレクティブ #import もサポート します。-msc オプションの使用時に、アナライザが以下の文を認識すると filename.tlh でインクルードを実行します。

#import <filename.ext>
#import "filename.ext"
そして -I、-S オプションで指定されたインクルード・ディレクトリで、該当の tlh ファイルを検索します。

さらに -msc キーワードは、アナライザが収集するシンボルおよび関連情報に影響を与えない、単純な修飾子である一部のキーワードを無視します。該当するキーワードは次の通りです: cdecl、far、fortran、huge、near、pascal、_cdecl、_export、_far、_fastcall、_fortran、_huge、_interrupt、_loadds、_near、_pascal、_saveregs、__cdecl、__export、__fastcall、__far、__fortran、__huge、__interrupt、__loadds、__near、__pascal、__saveregs。
これらのキーワードに関しては、コンパイラ設定ファイルに "#define keyword" 行を追記することで、同じ解析結果を得ることがあります。

他にもこれら Microsoft 社の拡張機能の一部をサポートするコンパイラがいくつかありますので、非 Microsoft コードで -msc オプションを使用することによって、その利便性を理解できます。

このオプションは [データソース] ダイアログの [ソースファイル] タブにある [PPフラグ] フィールドに追加するか、コンパイラ設定ファイルまたは Makefile に記述します。

-msgFilename   アナライザが生成するメッセージを標準出力せず Filename に書き込みます。

アナライザはソースコードを処理するとき、ファイルの処理状況に関するメッセージや、発生した解析上のあらゆる問題を出力します。通常、アナライザはこれらのメッセージを標準出力しますが -msg オプションを指定することにより、標準出力せずにメッセージを直接、指定のファイルに書き込みます。

-msrc:   ソースコードにおける複数の解析パスの結果を格納します。

アナライザがソースコードを解析すると、別々のファイルからインクルードされることで、同一のヘッダファイルを複数回処理することがあります。ヘッダファイルが解析されるごとに、マクロ定義の現在のステータスが使用されます。#ifdef、#ifndef、#if を使用することで、ヘッダから各パスを生成し、異なる結果が得られることがあります。例を挙げると、typedef がある1つのパスで特定の方法により定義され、それ以外のパスではまったく定義されない、というようなケースが考えられます。

ソースアナライザがコードを解析する際には、直近のパスからヘッダファイルの情報を取得するため、下流の解析では適切なタイプの定義などを使用することができるのです。しかしディスプレイやレポートに情報を表示するには、ファイルの内容を個別に表す必要があります。

通常、Imagix 4D のデフォルトの動作は、アナライザの最初のパスに基づきヘッダファイルを介してデータファイルを格納し、その後、使用するというものです。これは、最初に条件付きで有効であったコードを反映します。

またヘッダファイルのパスを介して有効になったことがあるコードを、すべて確認する必要があるような場合には、-msrc スイッチを使用することで、ヘッダファイルを介したすべてのパスの結果をデータファイルに格納し、Imagix 4D ディスプレイとレポートの作成に使用することができます。

このオプションは [データソース] ダイアログの [オプション] タブにある、解析オプションの1つとして選択します。
注: -msrc オプションは、ソースアナライザの同一の呼び出し処理に限り機能します。Makefile の解析方法を併用するか、異なるプロジェクトが混合プロジェクトへ統合される場合、別々のソースアナライザの呼び出しによる、同一のヘッダファイルに対する複数回のアクセスを追跡しません。

-msrcf:   ソースコードにおける複数の解析パスの結果を格納します(拡張機能)。

ヘッダファイルを介して複数のパスを処理する際、-msrc オプションを使用することでアナライザは、すでに解析済みの行を記録します。各パスでは、まだ解析されていない、あらゆる行に関する情報が収集されます。多くの場合このオプションにより、条件付きでコンパイルされたコードの意味を、十分に捉えることが可能です。

しかし場合により、特定の行の意味や相互参照データの結果が、1つの解析パスと次の解析パスとで変わることがあります。このような場合に -msrcf は -msrc にはない強力な機能を提供します。基本的に -msrcf オプションは、ヘッダファイルがインクルードされるたびに、その各行に関する情報を収集します。ただし、このオプションを使用するとデータベースのサイズを大幅に増大させ、パフォーマンスの低下を引き起こすため、慎重に適用してください。また、別々の定義設定に基づいて新しいコードを生成するため、ヘッダファイルを意図的に複数回にわたりインクルードする場合に限り、有効なオプションでもあります。

-msrcf の呼び出し方法としてこの他に、-msrcffilename.c を使用する方法があります。この方法で呼び出されると、filename.c の解析の間のみ、より強力なデータ収集が実行されます。また他のソースファイルは、あたかも -msrc が指定されているかのように解析されます。

このオプションは [データソース] ダイアログの [ソースファイル] タブにある [PPフラグ] フィールドに追加するか、コンパイラ設定ファイルまたは Makefile に指定します。-msrcf オプションが使用されると、-msrc は無効となります。

注: -msrcf オプションは、ソースアナライザの同一の呼び出し処理に限り機能します。Makefile の解析方法を併用するか、異なるプロジェクトが混合プロジェクトへ統合される場合、別々のソースアナライザの呼び出しによる、同一のヘッダファイルに対する複数回のアクセスを追跡しません。

-nestcom:   ネストされた C 形式のコメントをサポートします。

多くのコンパイラでは、入れ子になった C 形式のコメントの使用がサポートされていません。以下のようなコードにおいて、それらのコンパイラは C をシンボルとして認識し、C の後に続く */ を問題として指摘します。

/* A /* B */ C */ D = 1;
ただし一部のコンパイラは C */ を /* A で始まるコメントの終了部分として 処理し、D までの記述をすべて無視します。-nestcom オプションを使用すると、Imagix 4D アナライザはこの後者のコンパイラのように動作します。

このオプションは [データソース] ダイアログの [ソースファイル] タブにある [PPフラグ] フィールドに追加するか、コンパイラ設定ファイルまたは Makefile に指定します。

-neu:   Neuron C 言語の使用をサポートします。

Neuron C は、C 言語の正式な改良版であり、Echelon ハードウェア用の Echelon クロスコンパイラによりサポートされています。-neu オプションを使用することでアナライザは、Neuron C 言語の構文と意味を認識しサポートします。

このオプションは [データソース] ダイアログの [ソースファイル] タブにある [PPフラグ] フィールドに追加するか、コンパイラ設定ファイルまたは Makefile に指定します。

-noendasm:   #asm を単一行のプリコンパイラ・ディレクティブとしてサポートします。

ある特定のコンパイラは C / C++ のソースファイルに記述されたインライン・アセンブラコードをサポートします。これは、多岐にわたる言語構成要素を活用することで実現しています(ユーザガイド に記載の「言語拡張」のページを参照)。インライン・アセンブラ行を区別する #asm および #endasm のプリコンパイラ・ディレクティブの使用を含め、一般的なコンパイラの規則はアナライザにより自動的にサポートされます。しかしこのように、すべてのコンパイラが #asm に対応しているわけではありません。一部のコンパイラでは、ユーザが行頭に #asm を記述することで、その行の残りの部分がインライン・アセンブラコードで構成されていることを示すものもあります。この場合、終了ディレクティブ #endasm は必要ありません。また、対応する #endasm を記述せずに #asm を後で使用することも可能です。

このオプションは [データソース] ダイアログの [ソースファイル] タブにある [PPフラグ] フィールドに追加するか、コンパイラ設定ファイルまたは Makefile に指定します。

-nosys:   システム・ヘッダファイル用のデータを生成しません。

インクルード・ディレクトリを指定する際に -Idirname の代わりに -Sdirname を使用すると、アプリケーション・ディレクトリではなくシステム・ディレクトリとして、対象のディレクトリを指定します。-nosys オプションの使用に関わらず、ソフトウェアの精確な解析に必要となるため、システム・ディレクトリ内のヘッダファイルはインクルード時に構文解析されます。ところが -nosys が設定されると、システム・ディレクトリで認識されたヘッダファイルに関するデータが収集されません。

-nosys を使用することにより、fprintf のようなシステムシンボルが宣言されているファイルを閲覧したり、検索したりすることができなくなる、という影響が生じます。一般的に stdio.h などのファイルの内容を確認する有用性はあまりありません。このため一般的には、利用価値の低いデータを除外するような場合に、-nosys オプションを有効にします。

このオプションは [データソース] ダイアログの [オプション] タブにある、解析オプションの1つとして選択します。

-nosysbodies:   システム・ヘッダファイルに定義されている関数本体のデータを生成しません。

インクルード・ディレクトリを指定する際に -Idirname の代わりに -Sdirname を使用すると、アプリケーション・ディレクトリではなくシステム・ディレクトリとして、対象のディレクトリを指定します。-nosysbodies オプションの使用に関わらず、ソフトウェアの精確な解析に必要となるため、システム・ディレクトリ内のヘッダファイルはインクルード時に構文解析されます。ところが -nosysbodies が設定されると、システム・ディレクトリで定義された関数の内容に関するデータが作成されません。このため実質的には -nosys オプションよりも重要度の低いオプションとなります。

-nosysが [データソース] ダイアログの [オプション] タブから有効にされている場合、オプションは自動的に追加されます。-nosysが無効にされている場合、オプションは [データソース] ダイアログの [オプション] タブの解析オプションの一部として利用可能です。

-oFilename   データファイル Filename に解析結果を書き込みます。

アナライザは明示的に解析された各ソースファイルおよび、直接的あるいは間接的にそのソースファイルによりインクルードされた各ヘッダファイルのエンティティ、関係、属性データを生成します。ただし、システム・インクルード・ディレクトリにあるヘッダファイルは、この例外となる可能性があります(-S および -nosys オプションを参照)。

-o オプションを使用することで、あらゆるソースファイルならびにヘッダファイルのデータが単一のファイル Filename に格納されます。このオプションは、従来の互換性を保つために提供されているため、-genvdb オプションの利用が推奨されます。

このオプションは、Imagix 4D ユーザ・インターフェイスから設定することはできません。

-Rdirname   #include ファイルを、まず dirname で検索し、次にカレントディレクトリを検索します。

アナライザが #include "filename" プリプロセッサ・ディレクティブを認識すると、まず -R および -H オプションで指定された全ディレクトリで filename を検索します。filename が存在しない場合は、その後カレントディレクトリ(".")で filename を検索します。それでも filename が見つからないときは、-I ならびに -S オプションで指定されたディレクトリを検索します。#include "filename" ではなく #include <filename> を使用すると、カレントディレクトリ(".")での検索はスキップされます。

-R オプションで指定されたディレクトリは、オプションで指定された順番で検索されます。これらのディレクトリはシステム・インクルード・ディレクトリとして処理され、-S オプションで指定されたディレクトリと同じように扱われます。また、同ディレクトリをアプリケーション・インクルード・ディレクトリとして処理したい場合は、-H オプションを使用してください。この場合の影響に関しては、-nosys オプションの説明に記載があります。

このオプションは、[データソース] ダイアログの [インクルードディレクトリ] タブにある [-I、-Sフラグ] フィールドで指定するか、コンパイラ設定ファイルまたは Makefile に指定します。また Windows 版のアナライザも /R オプションを認識します。

-Sdirname   #include ファイルを検索するディレクトリのリストに dirname を追記します。

アナライザが #include "filename" プリプロセッサ・ディレクティブを認識すると、まず -H および -R オプションで指定された全ディレクトリで filename を検索します。filename が存在しない場合は、その後カレントディレクトリ(".")で filename を検索します。それでも filename が見つからないときは、-I ならびに -S オプションで指定されたディレクトリを検索します。#include "filename" ではなく #include <filename> を使用すると、カレントディレクトリ(".")での検索はスキップされます。

Imagix 4D アナライザは、カレントディレクトリにおける検索の実行を判断することを目的に、 #include <filename> と #include "filename" を区別します。アプリケーション・インクルード・ディレクトリとして、インクルード・ディレクトリを宣言するには、-Sdirname ではなく -Idirname オプションを使用してください。この場合の影響に関しては、-nosys オプションの説明に記載があります。

このオプションは [データソース] ダイアログの [インクルードディレクトリ] タブにある [-I、-Sフラグ] フィールド、または Makefile に指定します。また Windows 版のアナライザも /S オプションを認識します。

-sfx:   -genflow および -genqcf データに関連するファイル名に接尾辞を追記します。

通常 -genflow ならびに -genqcf スイッチで生成されたデータは、対応するオリジナルのソースファイル、ならびにヘッダファイルと同じ接尾辞のファイル名に格納されます。これにより、ある特定の構成管理システムでは、問題が生じる場合があります。-sfx オプションは、ファイル名の末尾に _sfx を追記することで、.c ソースファイルから生成されたデータを .c_sfx というファイル名の形式で保存します。

このオプションは [データソース] ダイアログの [ソースファイル] タブにある [PPフラグ] フィールドに追加するか、コンパイラ設定ファイルまたは Makefile に指定します。

-sysincfirst:   < > で指定されたあらゆるヘッダファイルを、-S ディレクトリ次に -I ディレクトリの順で検索します。

インクルードされたファイルを検索する場合のデフォルトの動作は、-I と -S オプションが指定されている順序で、インクルード・ディレクトリを検索します。アプリケーション・ヘッダファイルが #include "appfile.h" として、システム・インクルード・ファイルが #include <sysfile.h> としてインクルードされている場合、-sysincfirst オプションを使用することで、名前が重複する回数を減らすことが可能です。これはファイル検索が、インクルード・ディレクトリの構成要素の適切な集合から開始されるためです(ユーザガイド に記載の「システム / アプリケーション・インクルード・ディレクトリ」のセクションを参照)。

このオプションは [データソース] ダイアログの [ソースファイル] タブにある [PPフラグ] フィールドに追加するか、コンパイラ設定ファイルまたは Makefile に指定します。

-traditional:   C 言語の K&R スタイルをサポートします。

多くの場面で Imagix 4D アナライザは、ユーザが ANSI C 規格または、より古い K&R スタイルのどちらに準じるかを指定することなく、C コードを解析することが可能です。ところが特定の構成要素には、ANSI C 規格と K&R スタイルの間における動作の違いが、自動的に解決されないコメントがマクロに記述されています。アナライザはデフォルトで ANSI C 規格に対応していますが、このオプションを適用することで、K&R の仕様もサポートします。またこのオプションは、-kr オプションを呼び出すことも可能です。

このオプションは [データソース] ダイアログの [ソースファイル] タブにある [PPフラグ] フィールドに追加するか、コンパイラ設定ファイルまたは Makefile に指定します。

-trkmem:   別々の変数として構造体 / 共用体のインスタンス化をそれぞれ追跡します。

-trkmem オプションは集約変数(構造体または共用体のような集合型の変数)のメンバが imagix-csrc によってどのように解析され、その後どのようにユーザ・インターフェイスに表示されるか、という点に影響を及ぼします。デフォルトの動作は、別々の変数として集約変数そのものを追跡しますが、集約変数の間における同等のメンバを、単一の変数として結合し追跡します。例えば var1 と var2 という2つの変数が structA という同じ型であり、この structA はメンバ memA を所有していると仮定します。ツールのデフォルトの挙動は、var1 と var2 を別々に追跡しますが、var1.memA および var2.memA をあわせて、単純に memA と見なします。これによりツールのさまざまな利用場面において、それ相応の特異性と複雑性というトレードオフが作成されるデータベースに生じます。しかし、インスタンス化した各 memA を別々に追跡する必要が生じるかもしれません。-trkmem オプションを使用することで、これを実現します。つまり、var1.memA は var2.memA と異なる変数として認識されるのです。

このオプションは [データソース] ダイアログの [ソースファイル] タブにある [PPフラグ] フィールドに追加するか、コンパイラ設定ファイルまたは Makefile に指定します。

-Umacroname   マクロ macroname を未定義にします。

これは、コンパイラ・オプションの -U と同じものになります。マクロの置換は、ソースコード解析のアナライザによる前処理の一部です。マクロが未定義の間は、条件付きコンパイル・ディレクティブ 「#ifdef macroname」で定義されたブロック内のコードは解析されません。

このオプションは [データソース] ダイアログの [ソースファイル] タブにある [PPフラグ] フィールドで指定するか、Makefile に指定します。Windows 版のアナライザも /U オプションを認識します。

-uaggr:   異なるファイルに定義された最上位クラスを、別々のクラスと見なします。

コンパイラの標準的な動作では、グローバル命名規則を適用します。この規則は、同一コンパイラ単位(実行ファイル、DLL、ライブラリなど)で、同じ名前を持つ最上位のクラスはすべて、同一のクラスであると見なします。複数のコンパイラ単位にまたがるプロジェクトを定義する必要が生じるかもしれませんが、そのような場合、別々のコンパイル単位は実際は異なるクラスに対して、図らずも同じ最上位クラスの名前を再利用することがあります。-uaggr オプションを使用することで、このような名前の重複を防止することが可能です。-uaggr を指定すると、異なるファイルで定義された最上位クラスはすべて、たとえ同じ名前であっても、別々のクラスとして扱われます。

このオプションは [データソース] ダイアログの [ソースファイル] タブにある [PPフラグ] フィールドに追加するか、コンパイラ設定ファイルまたは Makefile に指定します。

-unique:   別々のファイルに定義された typedefs を、異なる typedefs と見なします。

imagix-csrc ソースアナライザのデフォルトの動作では、重複した型定義(複数のファイルに同じ名前で定義された typedefs )は、プログラミングの都合上のものであり、同一の typedef を示すものとして捉えます。例えば、単純な typedef は大きなヘッダファイルをインクルードしないよう、ソースファイルに追記されることがあるかもしれません。共通の型を必ずヘッダファイルに定義しなければならないコーディング・ガイドラインを適用する場合、-unique オプションを使用することで、同一の名前を持つ別々に定義された型を、異なる typedef として処理します。

このオプションは [データソース] ダイアログの [ソースファイル] タブにある [PPフラグ] フィールドに追加するか、コンパイラ設定ファイルまたは Makefile に指定します。

-vms:   VMS 言語の拡張機能を有効にします。

多くのコンパイラは、標準 C / C++ 言語に対するキーワードを使用した一部の拡張機能を認識します。これら拡張機能の大半は、コンパイラ設定ファイルに記述する "#define keyword" ディレクティブによってサポートされています。しかし #defines に対応していない特定の拡張機能には、さらなるサポートが要求されます。一部のキーワード向けに、このサポートを提供するのが -vms オプションです。

特に、-vms オプションは "_align (identifier)" および "__align (identifier)" 宣言指定子の使用におけるサポートを追加します。

このオプションは [データソース] ダイアログの [ソースファイル] タブにある [PPフラグ] フィールドに追加するか、コンパイラ設定ファイルまたは Makefile に指定します。

-voidfptr:   関数ポインタの解析で void* のインスタンスをインクルードします。

imagix-csrc ソースアナライザのデフォルトの動作では、相当量のフォルス・ポジティブ(誤検出)を生成することがあるため、関数ポインタを介した呼び出しを解析する際に void* のインスタンスを無視します。このため、関数ポインタの処理方法としてコードに void* を記述する場合は、このオプションを有効にしてください。

このオプションは [データソース] ダイアログの [ソースファイル] タブにある [PPフラグ] フィールドに追加するか、コンパイラ設定ファイルまたは Makefile に指定します。

-vuid:   解析する各シンボル用の VUID を生成します。

プロジェクトに関するドキュメントを作成する際、通常は1つのパスに全ドキュメントを置きます。この場合にデータベースがロードされると、ハイパーテキスト・リンクで使用するシンボル識別子が割り当てられます。ドキュメントは単一のセッションで作成されるため、各 HTML ページで同一の識別子が使用されます。

-vuid オプションは、プロジェクトがロードされる時ではなく、ソースコードが解析されるタイミングで、ビジュアライザ固有の識別子を生成します。これによりプロジェクトのセッション間における識別子の一貫性を保ち、部分的かつ増分の HTML ファイルを生成することができるのです。部分的また増分のドキュメント作成に関する詳細は ../imagix/user/doc_gen/sample.dg_ を参照してください。

このオプションは [データソース] ダイアログの [ソースファイル] タブにある [PPフラグ] フィールドに追加するか、コンパイラ設定ファイルまたは Makefile に指定します。

-warn:   アナライザの警告をすべて返します。

ソースコード解析の際、Imagix 4D アナライザはソースコードそのもの、もしくはコード解析に使用されるマクロ定義およびインクルード・パスにより、構文エラーもしくは意味エラーを検出することがあります。

アナライザはデフォルトで、インクルード・ファイルが存在しなかったり、アナライザと再同期するためコードを何行かスキップする必要があったりと、重大な問題が発生した場合にエラーメッセージを返します。-warn オプションを使用すると、アナライザは検出したあらゆる問題に対するメッセージを返します。

後の解析において、深刻なエラーに繋がる初期の問題の切り分けに、-warn オプションを使用すると効果的な場合があります。

このオプションは常にユーザ・インターフェイスから有効にしてください。[解析結果]ウィンドウにおける生成された警告メッセージの表示 / 非表示は、ディスプレイ設定([表示] > [~~を表示])に従います。

ディレクトリ名のスペース

上記のオプション(-cmmd、-cwd、-genXXX、-H、-I、-inc、-msg、-R、および-S)のいくつかは、オプション名とそれに続くディレクトリ名またはファイル名で構成されます。 Windowsでは、ディレクトリ名とファイル名にスペースを含めることができます。 そのようなスペースが存在する場合は、完全なディレクトリ名がオプションの一部として処理されるように、完全な-optionDIRNAME文字列を二重引用符( ")で囲みます。

例えば、-incC:/progra~1/imagix/user/cc_cfg/msvc_win.inc は問題ありません。

ただし、-incC:/program files/imagix/user/cc_cfg/msvc_win.inc はスペースがあるため、"-incC:/program files/imagix/user/cc_cfg/msvc_win.inc" と指定する必要があります。

サポート対象外のオプション

Imagix 4D アナライザにサポート対象外のオプションが渡されると、アナライザはそのオプションをマクロ定義に変換します。例えば、-ansi オプションはマクロ __IMGX_ansi__ を定義し、また -Xc オプションでは __IMGX_Xc__ が定義されます。オプションに付随の各 " - (ハイフン)" は "_ (アンダースコア)" に変換され、それ以外の非アルファベット文字は $<ASCII-value> に変換されます。一例をあげると、アナライザにオプションとして --lang_c++ を渡すと、マクロ __IMGX__lang_c$43$43__ が定義されます。

この変換方法により、Imagix 4D のコンパイラ設定ファイルにおける現在のコンパイル関連オプションの使用に、柔軟性が生まれるのです。

注: -H、-I、-R、-S で始まるオプションはすべて、インクルードパスを示すものとして解釈されるため、サポート対象外のオプションとして認識されません。