Udostępnij za pośrednictwem


/D (Definicje preprocesora)

Definiuje symbol przetwarzania wstępnego dla pliku źródłowego.

Składnia

/D[ ]name[= | # [{ ciąg | number }] ]
/D[ ]"name[= | # [{ ciąg | number }] ]"

Uwagi

Tego symbolu można używać razem z #if lub #ifdef do warunkowego kompilowania kodu źródłowego. Definicja symboli pozostaje w mocy, dopóki nie zostanie ponownie zdefiniowana w kodzie lub nie zostanie zdefiniowana w kodzie przez dyrektywę #undef .

/D ma taki sam efekt jak #define dyrektywa na początku pliku kodu źródłowego. Różnica polega na tym, że /D usuwa znaki cudzysłowu w wierszu polecenia, a #define dyrektywa je przechowuje. Możesz mieć odstępy między symbolem /D i . Między symbolem a znakiem równości nie może być odstęp lub między znakiem równości a dowolną przypisaną wartością.

Domyślnie wartość skojarzona z symbolem to 1. Na przykład instrukcja /D name jest równoważna instrukcji /D name=1. W przykładzie na końcu tego artykułu zostanie wyświetlona definicja TEST polecenia , aby wydrukować 1element .

Kompilowanie przy użyciu powoduje/D name=, że nazwa symbolu nie ma skojarzonej wartości. Mimo że nadal można używać symbolu, aby warunkowo skompilować kod, szacuje się on na wartość nothing. W tym przykładzie, jeśli kompilujesz przy użyciu metody /DTEST=, wystąpi błąd. To zachowanie przypomina użycie elementu #define z wartością lub bez niej.

Opcja /D nie obsługuje definicji makr podobnych do funkcji. Aby wstawić definicje, których nie można zdefiniować w wierszu polecenia, rozważ opcję kompilatora /FI (Nazwa wymuszonego dołączania pliku).

Możesz użyć /D wiele razy w wierszu polecenia, aby zdefiniować więcej symboli. Jeśli ten sam symbol jest zdefiniowany więcej niż raz, używana jest ostatnia definicja.

To polecenie definiuje symbol DEBUG w TEST.c:

CL /DDEBUG TEST.C

To polecenie usuwa wszystkie wystąpienia słowa kluczowego __far w pliku TEST.c:

CL /D __far= TEST.C

Nie można ustawić zmiennej środowiskowej CL na ciąg zawierający znak równości. Aby używać /D razem ze zmienną CL środowiskową, należy określić znak numeru (#) zamiast znaku równości:

SET CL=/DTEST#0

Podczas definiowania symbolu przetwarzania wstępnego w wierszu polecenia, należy wziąć pod uwagę reguły analizy składni zarówno kompilatora, jak i powłoki. Aby na przykład zdefiniować symbol przetwarzania wstępnego znaku procentu (%) w programie, określ dwa znaki znaku procentowego (%%) w wierszu polecenia. Jeśli określisz tylko jeden, zostanie wyemitowany błąd analizy.

CL /DTEST=%% TEST.C

Aby ustawić tę opcję kompilatora w środowisku programowania Visual Studio

  1. Otwórz okno dialogowe Strony właściwości projektu. Aby uzyskać więcej informacji, zobacz Set C++ compiler and build properties in Visual Studio (Ustawianie właściwości kompilatora języka C++ i kompilacji w programie Visual Studio).

  2. Wybierz stronę właściwości Właściwości>konfiguracji C/C++>Preprocesor.

  3. Otwórz menu rozwijane właściwości Definicje preprocesora i wybierz pozycję Edytuj.

  4. W oknie dialogowym Definicje preprocesora dodaj, zmodyfikuj lub usuń co najmniej jedną definicję na wiersz. Wybierz przycisk OK , aby zapisać zmiany.

    Nie musisz dołączać prefiksu opcji "/D" do definicji, które określisz tutaj. Na stronie właściwości definicje są oddzielone średnikami (;).

Aby programowo ustawić tę opcję kompilatora

Przykład

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

Zobacz też

Opcje kompilatora MSVC
Składnia wiersza polecenia kompilatora MSVC
/FI (Nazwa wymuszonego pliku dołączania)
/U, /u (Niezdefiniuj symbole)
#undef Dyrektywa (C/C++)
#define Dyrektywa (C/C++)