メインコンテンツ

無効なプリプロセッサ定義 (-U)

前処理済みのコード内でのマクロの定義解除

説明

前処理済みのコード内でマクロの定義を解除します。

オプションの設定

以下のいずれかの方法を使用してオプションを設定します。

  • Polyspace® ユーザー インターフェイス (デスクトップ製品のみ): プロジェクト構成で [マクロ] ノードを選択してから、このオプションのマクロ名を入力します。

  • Polyspace Platform ユーザー インターフェイス (デスクトップ製品のみ): プロジェクト構成の [ビルド] タブで [ターゲットおよびコンパイラ] ノードを選択してから、このオプションのマクロ名を入力します。

  • コマンド ラインオプション ファイル: オプション -U を使用します。コマンド ライン情報を参照してください。

このオプションを使用する理由

このオプションは、コンパイラの動作をエミュレートするために使用します。たとえば、コンパイラがマクロ _WIN32 を未定義と見なし、#ifndef _WIN32 ブロック内のコードを実行する可能性があります。Polyspace 解析の実行中にこの動作をエミュレートするには、このオプションを使用して _WIN32 を未定義として指定します。

このオプションは以下のマクロを未定義にします。

  • -D オプションを使用して定義されたマクロ。プリプロセッサ定義 (-D) を参照してください。

  • コンパイラによって暗黙的に定義された可能性のあるマクロ。

  • Polyspace がコンパイラの動作をエミュレートするために既定で有効にするマクロ。コンパイラ (-compiler) を参照してください。

ソース コードで #define ステートメントを使用してマクロを定義する場合は、このオプションを使用してそのマクロを未定義にすることはできません。

通常、特定のマクロが未定義でなければならないことをコンパイル エラーによって認識します。たとえば、以下のコードは、マクロ _WIN32 が定義されている場合コンパイルされません。

#ifndef _WIN32
  int env_var;
#endif

void set() {
  env_var=1;
}
エラー メッセージには、env_var が定義されていないことが示されます。ただし、env_var の定義は #ifndef _WIN32 ステートメントにあります。このエラーの根本的原因は、マクロ _WIN32 が定義されていることです。_WIN32 の定義を解除しなければなりません。

設定

既定値なし

ボタンを使用し、未定義にする各マクロに対し新規行を追加します。

ヒント

コンパイラの仕様によって、多くのコンパイラ固有のマクロの値が決定されます。Polyspace で特定のマクロがどのように定義されるかを確認するには、オプション -dump-preprocessing-info を使用します。

  • コンパイラ仕様のマクロ定義をオーバーライドするには、オプション [プリプロセッサ定義] (-D) を使用します。

  • マクロの定義を解除するには、このオプションを使用します。

ビルド プロセス中に、ファイル固有の undefines がプロジェクト レベルのビルド構成とマージされます。CMAKE ベースのツールチェーンでこのオプションを使用すると、警告が発生します。

コマンド ライン情報

それぞれの -U オプションで指定できるフラグは 1 つのみです。ただし、オプションを複数回指定できます。

パラメーター: -U
既定値なし
値: macro
例 (Bug Finder): polyspace-bug-finder -U HAVE_MYLIB -U USE_COM1
例 (Code Prover): polyspace-code-prover -U HAVE_MYLIB -U USE_COM1
例 (Bug Finder Server): polyspace-bug-finder-server -U HAVE_MYLIB -U USE_COM1
例 (Code Prover Server): polyspace-code-prover-server -U HAVE_MYLIB -U USE_COM1