メインコンテンツ

プリプロセッサ定義 (-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 を定義しなければなりません。

設定

既定値なし

ボタンを使用し、定義するマクロの行を追加します。定義は Macro=Value の形式でなければなりません。Polyspace でマクロを無視させるには、Value を空白のままにします。

以下に例を示します。

  • name1=name2name1 のすべてのインスタンスを 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
既定値なし
値: flag=value
例 (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