Определения препроцессора (/D)/D (Preprocessor Definitions)

Определяет символ предварительной обработки для исходного файла.Defines a preprocessing symbol for a source file.

СинтаксисSyntax

/D [ ]имя [ = | # [ { | номер строки}]] /D[ ]name[= | # [{ string | number }] ]
/D [ ] " имя [ = | # [ { | номер строки}]]"/D[ ]"name[= | # [{ string | number }] ]"

КомментарииRemarks

Этот символ можно использовать совместно с #if или #ifdef для условной компиляции исходного кода.You can use this symbol together with #if or #ifdef to compile source code conditionally. Определение символа действует до тех пор, пока оно не будет переопределено в коде или не определено в коде #undef директивой.The 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 размещает кавычки в командной строке, и #define директива сохраняет их.The 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.

Эта команда определяет символ DEBUG в файле TEST.c:This command defines the symbol DEBUG in TEST.c:

CL /DDEBUG TEST.C

Эта команда удаляет все вхождения ключевого слова __far из файла TEST.c: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. Чтобы использовать параметр /d вместе с переменной среды CL , необходимо указать знак решетки ( # ) вместо знака равенства:To use /D together with the CL environment variable, you must specify the number sign (#) instead of the equal sign:

SET CL=/DTEST#0

При определении символа предварительной обработки в командной строке необходимо учитывать правила синтаксического разбора компилятора и правила синтаксического разбора оболочки.When you define a preprocessing symbol at the command prompt, consider both compiler parsing rules and shell parsing rules. Например, чтобы определить в программе символ препроцессора в процентах ( % ), укажите в командной строке два символа процента ( %% ).For example, to define a percent-sign preprocessing symbol (%) in your program, specify two percent-sign characters (%%) at the command prompt. Если указать только один, будет выдаваться ошибка синтаксического анализа.If you specify only one, a parsing error is emitted.

CL /DTEST=%% TEST.C

Установка данного параметра компилятора в среде разработки Visual StudioTo set this compiler option in the Visual Studio development environment

  1. Откройте диалоговое окно Окна свойств проекта.Open the project Property Pages dialog box. Подробнее см. в статье Настройка компилятора C++ и свойств сборки в Visual Studio.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. В диалоговом окне определения препроцессора добавьте (по одному на строку), измените или удалите одно или несколько определений.In the Preprocessor Definitions dialog box, add (one per line), modify, or delete one or more definitions. Выберите ОК для сохранения внесенных изменений.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

ПримерExample

// 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);
#else
    printf_s("TEST not defined\n");
#endif
}
TEST defined 1

См. также разделSee also

Параметры компилятора КОМПИЛЯТОРОМ MSVCMSVC Compiler Options
Синтаксис Command-Line компилятора КОМПИЛЯТОРОМ MSVCMSVC 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++)