/D(预处理器定义)

更新:2010 年 7 月

定义源文件的预处理符号。

/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

在命令提示符下定义预处理符号时,应考虑 shell 语法分析规则和编译器分析规则。 例如,在程序中定义一个百分号预处理符号 (%),在命令行上指定两个百分号字符 (%%)。 如果您指定了唯一一个百分号,则将出现分析错误。

CL /DTEST=%% TEST.C

在 Visual Studio 开发环境中设置此编译器选项

  1. 打开此项目的**“属性页”**对话框。 有关更多信息,请参见 如何:打开项目属性页

  2. 在左窗格中,单击**“C/C++”** ,再单击**“预处理器”**。

  3. 在右窗格中,修改**“预处理器定义”**属性。

以编程方式设置此编译器选项

示例

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

请参见

参考

编译器选项

设置编译器选项

/U、/u(未定义符号)

#undef Directive (C/C++)

#define Directive (C/C++)

修订记录

Date

修订记录

原因

2010 年 7 月

添加了有关您必须指定两个“%%”符号以定义一个“%”预处理符号的说明。

内容 Bug 修复