C#中的预处理程序指令

时间:2016-10-20 16:43:25

标签: c# c-preprocessor

在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!

2 个答案:

答案 0 :(得分:5)

您期望的输出是错误的。

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();
}

希望这可以解除您对预处理器不决定执行顺序的困惑。

答案 1 :(得分:2)

C#语言规范,第2.5节

  

预处理指令提供了有条件的能力   跳过源文件的部分,报告错误和警告条件,   并描绘源代码的不同区域。术语   “预处理指令”仅用于与C的一致性   和C ++编程语言。在C#中,没有单独的   预处理步骤;预处理指令作为一部分进行处理   词法分析阶段

  

预处理指令不是令牌,也不是令牌的一部分   C#的句法语法。但是,预处理指令可以   用于包括或排除令牌序列,并可以这种方式   影响C#程序的含义