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

在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语言规范,第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();
}

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

但代码将逐行运行预处理器指令是编译器关于如何编译程序的指令。它们对代码的执行顺序没有任何影响,但代码将逐行运行预处理器指令是编译器关于如何编译程序的指令。它们对代码执行顺序没有任何影响。