Определения препроцессора (/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
Откройте диалоговое окно Окна свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойств сборки в Visual Studio.
Выберите страницу свойств>конфигурации C/C++>Preprocessor.
Откройте раскрывающееся меню свойства "Определения препроцессора" и нажмите кнопку "Изменить".
В диалоговом окне "Определения препроцессора" добавьте, измените или удалите одно или несколько определений, по одной строке. Нажмите ОК, чтобы сохранить внесенные изменения.
Не нужно включать префикс параметра "/D" в определения, указанные здесь. На странице свойств определения разделяются точкой с запятой (
;
).
Установка данного параметра компилятора программным способом
- См. раздел PreprocessorDefinitions.
Пример
// 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++)