C# C语言中的预处理器指令#
在C#中,如果预处理器指令是在实际编译之前预处理的指令,那么为什么不在这个程序中首先执行它呢C# C语言中的预处理器指令#,c#,c-preprocessor,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 i
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语言规范,第2.5节
预处理指令提供了有条件地
跳过源文件的部分,以报告错误和警告条件,
以及描述源代码的不同区域。术语
“预处理指令”仅用于与C保持一致
以及C++编程语言。在C#中,没有单独的
预处理步骤;预处理指令作为一部分进行处理
词汇分析阶段
预处理指令不是令牌,也不是 C#的句法语法。但是,可以使用预处理指令 用于包括或排除令牌序列,并可以通过这种方式 影响C#程序的意义 C语言规范,第2.5节 预处理指令提供了有条件地 跳过源文件的部分,以报告错误和警告条件, 以及描述源代码的不同区域。术语 “预处理指令”仅用于与C保持一致 以及C++编程语言。在C#中,没有单独的 预处理步骤;预处理指令作为一部分进行处理 词汇分析阶段
预处理指令不是令牌,也不是 C#的句法语法。但是,可以使用预处理指令 用于包括或排除令牌序列,并可以通过这种方式 影响C#程序的意义
您期望的输出是错误的 在
DEBUG
模式/配置中处理(待编译)的代码
static void Main(string[] args)
{
Program1.display();
Program2 p2 = new Program2();
p2.show();
Console.WriteLine("DEBUG from preprocessor directive is working!");
}
static void Main(string[] args)
{
Program1.display();
Program2 p2 = new Program2();
p2.show();
}
在非-调试
模式/配置下处理(待编译)的代码
static void Main(string[] args)
{
Program1.display();
Program2 p2 = new Program2();
p2.show();
Console.WriteLine("DEBUG from preprocessor directive is working!");
}
static void Main(string[] args)
{
Program1.display();
Program2 p2 = new Program2();
p2.show();
}
希望这能消除您对预处理器不决定执行顺序的困惑。您期望的输出是错误的 在
DEBUG
模式/配置中处理(待编译)的代码
static void Main(string[] args)
{
Program1.display();
Program2 p2 = new Program2();
p2.show();
Console.WriteLine("DEBUG from preprocessor directive is working!");
}
static void Main(string[] args)
{
Program1.display();
Program2 p2 = new Program2();
p2.show();
}
在非-调试
模式/配置下处理(待编译)的代码
static void Main(string[] args)
{
Program1.display();
Program2 p2 = new Program2();
p2.show();
Console.WriteLine("DEBUG from preprocessor directive is working!");
}
static void Main(string[] args)
{
Program1.display();
Program2 p2 = new Program2();
p2.show();
}
希望这能消除您对预处理器不决定执行顺序的困惑。但代码将逐行运行预处理器指令是编译器关于如何编译程序的指令。它们对代码的执行顺序没有任何影响,但代码将逐行运行预处理器指令是编译器关于如何编译程序的指令。它们对代码执行顺序没有任何影响。