繁体   English   中英

C#中的预处理器指令

[英]Preprocessor directives in C#

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

您期望的输出错误。

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#语言规范,第2.5节

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


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM