Share via


/D (前置處理器定義)

為原始程式檔定義前置處理符號。

語法

/D[ ] name [ = | # [{ string | number }] ] ]
/D[ ] " name [ = | # [{ string | number }] ] ]"

備註

您可以搭配 #if#ifdef 使用此符號,條件式編譯原始程式碼。 符號定義會維持有效狀態,直到程式碼中重新定義,或由 #undef 指示詞在程式碼中未定義。

/D 與原始程式碼檔開頭的 指示詞具有相同的效果 #define 。 差別在於 /D ,在命令列上去除引號,而 指示 #define 詞會保留它們。 您可以在 和 符號之間 /D 有空白字元。 符號與等號之間不能有空白字元,也不能在等號與指派的任何值之間。

與符號相關聯的值預設為 1。 例如,/D name 相當於 /D name=1。 在本文結尾的範例中, TEST 會顯示 的定義來列印 1

使用 /D name= 進行編譯會導致符號 名稱 沒有相關聯的值。 雖然仍可使用該符號對程式碼進行條件式編譯,但除此以外,毫無意義。 在範例中,如果您使用 編譯 /DTEST= ,就會發生錯誤。 這個行為與使用包含或不含某值的 #define 相似。

選項 /D 不支援類似函式的巨集定義。 若要在命令列上插入無法定義的定義,請考慮 /FI [命名強制包含檔案] 編譯器選項。

您可以在 /D 命令列上使用多次來定義更多符號。 如果多次定義相同的符號,則會使用最後一個定義。

此命令會定義 TEST.c 中的符號 DEBUG:

CL /DDEBUG TEST.C

此命令會移除 TEST.c 中所有出現的關鍵字 __far

CL /D __far= TEST.C

CL 環境變數無法設定為包含等號的字串。 若要與環境變數搭配 CL 使用 /D ,您必須指定數位記號 ( # ) 而不是等號:

SET CL=/DTEST#0

在命令提示字元定義前置處理符號時,請考慮編譯器剖析規則及殼層剖析規則。 例如,若要在您的程式中定義百分號前置處理符號 ( % ),請在命令提示字元中指定兩個百分比符號 ( %% )。 如果您只指定一個,就會發出剖析錯誤。

CL /DTEST=%% TEST.C

在 Visual Studio 開發環境中設定這個編譯器選項

  1. 開啟專案的 [屬性頁] 對話方塊。 如需詳細資料,請參閱在 Visual Studio 中設定 C ++ 編譯器和組建屬性

  2. 選取 [ 組態屬性 > C/C++ > 預處理器 ] 屬性頁。

  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++)