プリプロセッサ定義 (-D
)
前処理済みのコード内でのマクロの置き換え
説明
前処理済みのコード内でマクロをその定義に置き換えます。
オプションの設定
以下のいずれかの方法を使用してオプションを設定します。
Polyspace® ユーザー インターフェイス (デスクトップ製品のみ): プロジェクト構成で [マクロ] ノードを選択してから、このオプションのマクロ定義を入力します。
Polyspace Platform ユーザー インターフェイス (デスクトップ製品のみ): プロジェクト構成の [ビルド] タブで [ターゲットおよびコンパイラ] ノードを選択してから、このオプションのマクロ定義を入力します。
コマンド ラインとオプション ファイル: オプション
-D
を使用します。コマンド ライン情報を参照してください。
このオプションを使用する理由
このオプションは、コンパイラの動作をエミュレートするために使用します。たとえば、コードのビルド時に、コンパイラによってマクロ _WIN32
が定義されていると見なされた場合、#ifdef _WIN32
ステートメント内のコードは実行されます。Polyspace でそのマクロが定義されていると見なされなかった場合は、このオプションを使用してマクロを 1 に置き換えなければなりません。
[コンパイラ] (-compiler)
の設定によっては、一部のマクロが既定で定義されます。このオプションは明示的に定義されていないマクロを定義するために使用します。
通常、特定のマクロが定義されていないことをコンパイル エラーによって認識します。たとえば、以下のコードは、マクロ _WIN32
が定義されていない場合コンパイルされません。
#ifdef _WIN32 int env_var; #endif void set() { env_var=1; }
env_var
が定義されていないことが示されます。ただし、env_var
の定義は #ifdef _WIN32
ステートメントにあります。このエラーの根本的原因は、マクロ _WIN32
が定義されていないことです。_WIN32
を定義しなければなりません。設定
既定値なし
ボタンを使用し、定義するマクロの行を追加します。定義は
の形式でなければなりません。Polyspace でマクロを無視させるには、Macro
=Value
を空白のままにします。Value
以下に例を示します。
name1=name2
はname1
のすべてのインスタンスをname2
に置き換えます。name=
はソフトウェアにname
を無視するように指示します。等号または値のない
name
によって、name
のすべてのインスタンスが 1 に置き換えられます。#ifdef
ステートメントのコードを実行するようにマクロを定義するには、この構文を使用します。macro_name
ヒント
Polyspace が非 ANSI® キーワードをサポートしておらず、コンパイル エラーが表示される場合、このオプションを使用して、前処理済みのコード内で発生するすべてのキーワードを空白文字列で置き換えます。置き換えは解析目的でのみ発生します。元のソース コードはそのまま保持されます。
たとえば、コンパイラが
__far
キーワードをサポートしている場合、コンパイル エラーを防ぐには以下を行います。ユーザー インターフェイス (デスクトップ製品のみ) で
__far=
と入力。コマンド ラインで
-D __far=
フラグを使用。
キーワード
__far
は前処理実行時に空白文字列に置き換えられます。以下に例を示します。は次のように変換されます。int __far* pValue;
int * pValue;
Polyspace では
restrict
などのキーワードを認識し、これらを識別子として使用することを許可しません。(コンパイラでこれらがキーワードとして認識されないために) これらのキーワードを識別子として使用する場合は、このオプションを使用して、許可されない名前を他の名前に置き換えます。置き換えは解析目的でのみ発生します。元のソース コードはそのまま保持されます。たとえば、識別子として
restrict
の使用を許可するには以下を行います。ユーザー インターフェイスで
restrict=my_restrict
を入力。コマンド ラインで
-D restrict=my_restrict
フラグを使用。
コンパイラの仕様によって、多くのコンパイラ固有のマクロの値が決定されます。Polyspace で特定のマクロがどのように定義されるかを確認するには、オプション
-dump-preprocessing-info
を使用します。コンパイラ仕様のマクロ定義をオーバーライドするには、このオプションを使用します。
マクロの定義を解除するには、オプション
[無効なプリプロセッサ定義] (-U)
を使用します。
コマンド ライン情報
それぞれの -D
オプションで指定できるフラグは 1 つのみです。ただし、オプションを複数回指定できます。
パラメーター: -D |
既定値なし |
値:
|
例 (Bug Finder): polyspace-bug-finder -D HAVE_MYLIB -D int32_t=int |
例 (Code Prover): polyspace-code-prover -D HAVE_MYLIB -D int32_t=int |
例 (Bug Finder Server): polyspace-bug-finder-server -D HAVE_MYLIB -D int32_t=int |
例 (Code Prover Server): polyspace-code-prover-server -D HAVE_MYLIB -D int32_t=int |