• C# 中的#if、#elif、#else、#endif等条件编译符号 (转载)


     这些是C#中的条件编译符号。这些指令我在项目中遇到过,查过网络,问过人(当然,既不认识大牛,也不认识小牛,所以没什么收获)。今天翻看一本资料,有提到这个方面的东西,所以写下来和能看到这篇文章的人一起学习。


     C#中的#define预处理指令不能定义替换常数。该指令现在只能定义用于条件编译的符号,为#if、#elif、#else及#endif所用。


     源文件在进行编译之前要进行一次文件处理,这是由预处理器完成的。这种文件处理只对源文件进行文本处理而不进行任何编译动作。所有预处理指令都以“#”符号开头。

    预处理识别以下指令识别以下指令:

    #define #undef #if #elif  #else  #endif #error  #warning #line #region #endregion
    #pragma warning disable       #pragma warning restore

     #if #elif  #else  #endif 指令可以完成,使用#define指令来定义一些指导预处理器修改原代码的符号的工作。下面是使用条件编译的实例:

    #define MACRO1
    using System;
    
    public class Program
    {
     public static void Main()
     {
       #if (MACRO1)
       console.writeline("MACRO1 is defined.");
       #elif (MACRO2)
       console.writeline("MACRO2 is defined and MACRO1 is not defined");
       #else
       console.writeline("MACRO2  and MACRO1 are both defined");
       #endif
     }
    }

    如果用vs,会看到开发环境将不编译的代码显示为灰色。符号常量必须在using指令之前定义。

    补充:

    #if 使您可以开始条件指令,测试一个或多个符号以查看它们是否计算为 true。如果它们的计算结果确实为 true,则编译器将计算位于 #if 与最近的 #endif 指令之间的所有代码。例如,

    #if DEBUG  
                string file = root + "/conf_debug.xml";  
    #else  
                string file = root + "/conf.xml";  
    #endif  

    这段代码会像往常那样编译,但读取debug配置文件包含在#if子句内。这行代码只有在前面的#define命令定义了符号DEBUG后才执行。当编译器遇到#if语句后,将先检查相关的符号是否存在,如果符号存在,就只编译#if块中的代码。否则,编译器会忽略所有的代码,直到遇到匹配的#endif指令为止。一般是在调试时定义符号DEBUG,把不同的调试相关代码放在#if子句中。在完成了调试后,就把#define语句注释掉,所有的调试代码会奇迹般地消失,可执行文件也会变小,最终用户不会被这些调试信息弄糊涂(显然,要做更多的测试,确保代码在没有定义DEBUG的情况下也能工作)。这项技术在C和C++编程中非常普通,称为条件编译(conditional compilation)。

    参考文献:

    C# 中的#if、#elif、#else、#endif等条件编译符号

    C# #if, #elif, #else和#endif预处理指令

  • 相关阅读:
    Android实战技巧:深入解析AsyncTask
    Android开发在路上:少去踩坑,多走捷径
    ART:Android 摆脱卡顿的希望?
    搭建Elasticsearch集群的配置
    Docker学习笔记-(5)容器数据管理,链接容器,构建私有库
    Docker学习笔记-(4)Dockerfile
    Docker学习笔记-(3)网络设置
    Docker学习笔记-(2)端口映射
    Docker学习笔记-(1)常用命令
    【架构】Heartbeat高可用服务(2)
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/9827095.html
Copyright © 2020-2023  润新知