/D(预处理器定义)
更新:2007 年 11 月
定义源文件的预处理符号。
/Dname[= | # [{string | number}] ]
备注
可以将此符号与 #if 或 #ifdef 一起使用,以便有条件地编译源文件。在源文件中遇到重定义或用 #undef 指定取消定义符号之前,符号定义保持有效。
/D 与在源文件的开头使用 #define 指令的效果大体相同。但是,/D 抽出命令行上的引号,#define 保留这些引号。
默认情况下,与符号关联的值为 1。即 /DTEST 等效于 /DTEST=1。在下面的示例中,显示 TEST 的定义以输出 1。
使用 /Dname= 进行编译将导致符号没有关联值。尽管该符号仍可用于有条件地编译代码,但它不会计算出任何结果。例如,在示例程序中,用 /DTEST= 进行编译将导致编译器错误。此行为类似于带或不带值使用 #define。
下列命令在 TEST.c 中定义符号 DEBUG:
CL /DDEBUG TEST.C
下面的命令移除 TEST.c 中关键字 __far 的所有匹配项:
CL /D__far= TEST.C
不能将 CL 环境变量设置为包含等号的字符串。若要将 /D 与 CL 环境变量一起使用,必须指定数字符号而非等号:
SET CL=/DTEST#0
在 Visual Studio 开发环境中设置此编译器选项
打开该项目的“属性页”对话框。有关详细信息,请参见如何:打开项目属性页。
单击“C/C++”文件夹。
单击“预处理器”属性页。
修改“预处理器定义”属性。
以编程方式设置此编译器选项
示例
// cpp_D_compiler_option.cpp
// compile with: /DTEST
#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