/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 開發環境中設定這個編譯器選項
開啟專案的 [屬性頁] 對話方塊。 如需詳細資料,請參閱在 Visual Studio 中設定 C ++ 編譯器和組建屬性。
選取 [組態屬性>C/C++>Preprocessor 屬性頁面。
開啟預處理器定義屬性的下拉功能表,然後選擇 [編輯]。
在 [ 預處理器定義 ] 對話框中,新增、修改或刪除每行一個或多個定義。 選取 [確定] 儲存您的變更。
您不需要在這裡指定的定義中包含 '/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++)