c#中的预处理器指令

本文关键字:处理器 指令 预处理 | 更新日期: 2023-09-27 18:14:14

在c#中,如果预处理器指令是在实际编译之前预处理的指令,那么为什么它不在这个程序中首先执行?

static void Main(string[] args)
        {
            Program1.display();
            Program2 p2 = new Program2();
            p2.show();
#if DEBUG
Console.WriteLine("DEBUG from preprocessor directive is working!");
#endif
        }
预期输出:

DEBUG from preprocessor directive is working!
.......(from display())
.......(from show())

但实际输出:

.......(from display())
.......(from show())
DEBUG from preprocessor directive is working!

c#中的预处理器指令

您期望的输出是错误的。

DEBUG模式下处理(待编译)的代码/配置

static void Main(string[] args)
{
    Program1.display();
    Program2 p2 = new Program2();
    p2.show();
    Console.WriteLine("DEBUG from preprocessor directive is working!");
}

- DEBUG模式/配置下处理(编译)的代码

static void Main(string[] args)
{
    Program1.display();
    Program2 p2 = new Program2();
    p2.show();
}

希望这能消除你对预处理器不决定执行顺序的困惑

c#语言规范,Section2.5

预处理指令提供了有条件地跳过源文件的部分,以报告错误和警告条件;并描绘源代码的不同区域。这个词"预处理指令"仅用于与C和c++编程语言。在c#中,没有分离预处理步骤;预处理指令作为一部分进行处理词法分析阶段


预处理指令不是令牌,也不属于c#的语法。然而,预处理指令可以用于包含或排除标记序列,并且可以以这种方式影响c#程序的意义