/D (プリプロセッサの定義)/D (Preprocessor Definitions)

ソース ファイルのプリプロセッサ シンボルを定義します。Defines a preprocessing symbol for a source file.


/D []名前 [ = | # [ {文字列 | 数値}]] /D[ ]name[= | # [{ string | number }] ]
/D [] " 名前 [ = | # [ {文字列 | 数値}]]"/D[ ]"name[= | # [{ string | number }] ]"


このシンボルを #if または #ifdef と一緒に使用すると、ソース コードを条件付きでコンパイルできます。You can use this symbol together with #if or #ifdef to compile source code conditionally. シンボル定義は、コード内で再定義されるか、ディレクティブによってコード内で定義されるまで、有効なままです #undefThe symbol definition remains in effect until it's redefined in the code, or is undefined in the code by an #undef directive.

/D は、 #define ソースコードファイルの先頭にあるディレクティブと同じ効果があります。/D has the same effect as a #define directive at the beginning of a source code file. 違いは、 /d によってコマンドラインで引用符が除去され、ディレクティブによって引用符が保持される点です #defineThe difference is that /D strips quotation marks on the command line, and a #define directive keeps them. /Dと記号の間には空白を含めることができます。You can have whitespace between the /D and the symbol. 記号と等号の間、または等号と代入された値の間に空白を入れることはできません。There can't be whitespace between the symbol and the equals sign, or between the equals sign and any value assigned.

既定では、シンボルに関連付けられる値は 1 です。By default, the value associated with a symbol is 1. たとえば、/D name は、/D name=1 と同じです。For example, /D name is equivalent to /D name=1. この記事の最後にある例では、の定義を TEST 印刷するように示してい 1 ます。In the example at the end of this article, the definition of TEST is shown to print 1.

を使用してコンパイル /D name= すると、シンボル に関連付けられた値がないことになります。Compiling by using /D name= causes the symbol name to have no associated value. シンボルは引き続きコードの条件コンパイルに使用できますが、何も指定されていないものとして評価されます。Although the symbol can still be used to conditionally compile code, it otherwise evaluates to nothing. この例では、を使用してコンパイルすると /DTEST= 、エラーが発生します。In the example, if you compile by using /DTEST=, an error occurs. この動作は、値を指定して、または値を指定せずに #define を使用する場合と似ています。This behavior resembles the use of #define with or without a value.

/Dオプションでは、関数に似たマクロ定義がサポートされていません。The /D option doesn't support function-like macro definitions. コマンドラインで定義できない定義を挿入するには、 /fi (強制インクルードファイルの名前の指定) コンパイラオプションを使用してください。To insert definitions that can't be defined on the command line, consider the /FI (Name forced include file) compiler option.

コマンドラインで /d を複数回使用して、追加のシンボルを定義できます。You can use /D multiple times on the command line to define additional symbols. 同じシンボルが複数回定義されている場合は、最後の定義が使用されます。If the same symbol is defined more than once, the last definition is used.

次のコマンドを実行すると、TEST.c で DEBUG シンボルが定義されます。This command defines the symbol DEBUG in TEST.c:


次のコマンドを実行すると、TEST.c からすべての __far キーワードが削除されます。This command removes all occurrences of the keyword __far in TEST.c:

CL /D __far= TEST.C

CL環境変数を等号を含む文字列に設定することはできません。The CL environment variable can't be set to a string that contains the equal sign. CL環境変数と共に /dを使用するには、等号の代わりにシャープ記号 () を指定する必要があり # ます。To use /D together with the CL environment variable, you must specify the number sign (#) instead of the equal sign:


コマンド プロンプトでプリプロセッサ シンボルを定義する場合は、コンパイラ解析規則とシェル解析規則の両方を考慮してください。When you define a preprocessing symbol at the command prompt, consider both compiler parsing rules and shell parsing rules. たとえば、プログラムでパーセント記号のプリプロセスシンボル () を定義するには、 % コマンドプロンプトで2つのパーセント記号 () を指定し %% ます。For example, to define a percent-sign preprocessing symbol (%) in your program, specify two percent-sign characters (%%) at the command prompt. 1つだけを指定した場合は、解析エラーが生成されます。If you specify only one, a parsing error is emitted.


Visual Studio 開発環境でこのコンパイラ オプションを設定するにはTo set this compiler option in the Visual Studio development environment

  1. プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。Open the project Property Pages dialog box. 詳しくは、「Visual Studio で C++ コンパイラとビルド プロパティを設定する」をご覧ください。For more information, see Set C++ compiler and build properties in Visual Studio.

  2. 左側のウィンドウで、[ 構成プロパティ]、[ C/c + +]、[ プリプロセッサ] の順に選択します。In the left pane, select Configuration Properties, C/C++, Preprocessor.

  3. 右側のウィンドウの [ プリプロセッサの定義 ] プロパティの右側の列で、ドロップダウンメニューを開き、[ 編集] を選択します。In the right pane, in the right-hand column of the Preprocessor Definitions property, open the drop-down menu and choose Edit.

  4. [ プリプロセッサの定義 ] ダイアログボックスで、1つまたは複数の定義の追加、変更、または削除を行います。In the Preprocessor Definitions dialog box, add (one per line), modify, or delete one or more definitions. [OK] を選択して変更を保存します。Choose OK to save your changes.

    ここで指定する定義に '/D ' オプションプレフィックスを含める必要はありません。You don't need to include the '/D' option prefix on the definitions you specify here. プロパティページでは、定義はセミコロン () で区切られ ; ます。In the property page, definitions are separated by semicolons (;).

このコンパイラ オプションをコードから設定するにはTo set this compiler option programmatically


// cpp_D_compiler_option.cpp
// compile with: cl /EHsc /DTEST cpp_D_compiler_option.cpp
#include <stdio.h>

int main( )
#ifdef TEST
    printf_s("TEST defined %d\n", TEST);
    printf_s("TEST not defined\n");
TEST defined 1

関連項目See also

MSVC コンパイラオプションMSVC Compiler Options
MSVC コンパイラのコマンドライン構文MSVC Compiler Command-Line Syntax
/FI (強制インクルードファイルの名前の指定)/FI (Name forced include file)
/U、/u (シンボルの未定義)/U, /u (Undefine Symbols)
#undef ディレクティブ (C/c + +)#undef Directive (C/C++)
#define ディレクティブ (C/c + +)#define Directive (C/C++)