在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!
答案 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#程序的含义