Поделиться через


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

Определяет символ предварительной обработки для исходного файла.

Синтаксис

/D[ имя[#= | [{ строковое | число }] ]
/D[ имя[#= | [{ строковое | число }] ]""

Замечания

Этот символ можно использовать совместно с #if или #ifdef для условной компиляции исходного кода. Определение символа остается в силе, пока оно не будет переопределено в коде или не определено в коде директивой #undef .

/D имеет тот же эффект, что и директива #define в начале файла исходного кода. Разница заключается в том, что /D разделит кавычки в командной строке, а директива #define сохраняет их. Пробелы между символом и символом могут быть пробелами /D . Между символом и знаком равенства не может быть пробел или между знаком равенства и любым назначенным значением.

По умолчанию значение, связанное с символом, равно 1. Например, выражение /D name будет эквивалентно /D name=1. В примере в конце этой статьи отображается определение TEST печати 1.

Компиляция путем использования /D name= приводит к тому, что имя символа не имеет связанного значения. Хотя символа все равно можно использовать для условной компиляции кода, в остальных случаях использование символа будет бесполезным. В примере при компиляции с помощью /DTEST=возникает ошибка. Это поведение напоминает использование #define со значением или без значения.

Этот /D параметр не поддерживает определения макросов, например функции. Чтобы вставить определения, которые не могут быть определены в командной строке, рассмотрите /FI параметр компилятора компилятора (принудительное включение имени).

Для определения дополнительных символов можно использовать /D несколько раз в командной строке. Если один и тот же символ определен несколько раз, используется последнее определение.

Эта команда определяет символ DEBUG в файле TEST.c:

CL /DDEBUG TEST.C

Эта команда удаляет все вхождения ключевого слова __far из файла TEST.c:

CL /D __far= TEST.C

Переменная среды CL не может быть задана строкой, содержащей знак равенства. Чтобы использовать /D вместе с переменной CL среды, необходимо указать знак номера (#) вместо знака равенства:

SET CL=/DTEST#0

При определении символа предварительной обработки в командной строке необходимо учитывать правила синтаксического разбора компилятора и правила синтаксического разбора оболочки. Например, чтобы определить символ предварительной обработки знака процента (%) в программе, укажите два символа знака процента (%%) в командной строке. Если указать только один, возникает ошибка синтаксического анализа.

CL /DTEST=%% TEST.C

Установка данного параметра компилятора в среде разработки Visual Studio

  1. Откройте диалоговое окно Окна свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойств сборки в Visual Studio.

  2. Выберите страницу свойств>конфигурации C/C++>Preprocessor.

  3. Откройте раскрывающееся меню свойства "Определения препроцессора" и нажмите кнопку "Изменить".

  4. В диалоговом окне "Определения препроцессора" добавьте, измените или удалите одно или несколько определений, по одной строке. Нажмите ОК, чтобы сохранить внесенные изменения.

    Не нужно включать префикс параметра "/D" в определения, указанные здесь. На странице свойств определения разделяются точкой с запятой (;).

Установка данного параметра компилятора программным способом

Пример

// 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

См. также

Параметры компилятора MSVC
Синтаксис командной строки компилятора MSVC
/FI (Имя принудительно включаемого файла)
/U, /u (неубедимые символы)
#undef Директива (C/C++)
#define Директива (C/C++)