C# 预处理器指令,可改变编译过程

前言

       预处理器指令是在编程语言编译流程开始之前执行的特殊指令。预处理器指令的作用主要是向编译器发出指令,以便在程序编译开始之前对信息进行一些预处理操作。这对于开发调试版本和发布版本之间的差异、管理平台的特定代码、处理特定编译警告和错误等都非常有用。

       在C#中,预处理器指令均以#开头,并且预处理器指令之前只能出现空格不能出现任何代码。另外,预处理器指令不是语句,因此它们不需要以分号;结尾。本文将介绍C#中预处理器指令的用途、语法。

语法与用途

C# 中包含以下预处理器指令,下表是各指令的简述。

#nullable 可空上下文

#nullable 是设置可为空注释上下文和可为空警告上下文 。此指令控制是否可为空注释是否有效,以及是否给出为 Null 性警告。使用方式看下表:

使用示例:

#nullable disable
using System;

namespace Fountain.Net.Base.Sample
{
    class Program
    {
        static void Main(string[] args)
        {
            // 定义一个整型变量 x
            int x = 5;
            // 定义一个整型变量 y
            int y = 4;
            // 定义一个整型变量 result,未赋值
            int result;
            // 两个变量进行加运算 
            result = x + y;
#if DEBUG
            Console.ReadLine();
#else
            Console.WriteLine("按回车退出");
            Console.ReadLine();
#endif

        }
    }
}
#nullable enable

#define 和 #undef 定义符号

#define是定义符号,#undef 是取消定义符号,当使用 #define定义符号后,在将符号用作传递给 #if 指令的表达式时,该表达式的计算结果为 true。

使用示例:

#nullable disable
using System;

namespace Fountain.Net.Base.Sample
{
    class Program
    {
        static void Main(string[] args)
        {
            // 定义一个整型变量 x
            int x = 5;
            // 定义一个整型变量 y
            int y = 4;
            // 定义一个整型变量 result,未赋值
            int result;
            // 两个变量进行加运算 
            result = x + y;
#if DEBUG
            Console.ReadLine();
#else
            Console.WriteLine("按回车退出");
            Console.ReadLine();
#endif

        }
    }
}
#nullable enable

#if、#elif、#else 和#endif 条件编译

#if、#elif、#else和#endif 这四个预处理器指令来控制条件编译,条件编译在编译调试版本的代码或编译特定配置的代码时会很有用。可以使用运算符 ==和 != true 表示定义该符号。 

使用示例

#nullable disable
#define commandTest
using System;

namespace Fountain.Net.Base.Sample
{
    class Program
    {
        static void Main(string[] args)
        {
            // 定义一个整型变量 x
            int x = 5;
            // 定义一个整型变量 y
            int y = 4;
            // 定义一个整型变量 result,未赋值
            int result;
            // 两个变量进行加运算 
            result = x + y;
#if DEBUG
            Console.ReadLine();
#else
            Console.WriteLine("按回车退出");
            Console.ReadLine();
#endif

        }
    }
}
#nullable enable

#warning、#error和#line 错误和警告信息

#warning、#error和#line 可以指示编译器生成用户定义的编译器错误和警告,并控制行信息。#error:使用指定的消息生成编译器错误;#warning:使用指定的消息生成编译器警告;#line:更改用编译器消息输出的行号。

使用示例

using System;

namespace Fountain.Net.Base.Sample
{
    class Program
    {
        static void Main(string[] args)
        {
#region Define variables
            // 定义一个整型变量 x
            int x = 5;
            // 定义一个整型变量 y
            int y = 4;
            // 定义一个整型变量 result,未赋值
            int result;
            // 两个变量进行加运算 
            result = x + y;
#endregion

#if DEBUG
    #warning Debug mode is enabled!
#endif
            Console.WriteLine("按回车退出");
            Console.ReadLine();
        }
    }
}

编译时出现警告

图片

#region 和#endregion 定义区域

#region与#endregion  二个指令是来定义可在大纲中折叠的代码区域。#region 启动区域,#endregion结束区域。

使用示例

using System;

namespace Fountain.Net.Base.Sample
{
    class Program
    {
        static void Main(string[] args)
        {
#region Define variables
            // 定义一个整型变量 x
            int x = 5;
            // 定义一个整型变量 y
            int y = 4;
            // 定义一个整型变量 result,未赋值
            int result;
            // 两个变量进行加运算 
            result = x + y;
#endregion
            Console.WriteLine("按回车退出");
            Console.ReadLine();

        }
    }
}

#pragma 杂注

#pragma 为编译器给出特殊指令以编译它所在的文件。这些指令必须受编译器支持,不能使用 #pragma 创建自定义的预处理指令。

#pragma warning:启用或禁用警告。

#pragma checksum:生成校验和。

小结

 以上是C#中常用的预处理器指令的语法与用途进行了介绍,希望对大家的学习C#知识有一定的参考借鉴价值。

相关推荐

  1. C 语言中 #define 处理器指令

    2024-02-22 10:04:01       20 阅读
  2. C# 处理器指令详解与示例

    2024-02-22 10:04:01       13 阅读
  3. .Net处理器指令

    2024-02-22 10:04:01       23 阅读
  4. C语言之#define #if 处理器指令

    2024-02-22 10:04:01       7 阅读
  5. C++ 处理器

    2024-02-22 10:04:01       28 阅读
  6. C语言】处理器

    2024-02-22 10:04:01       14 阅读
  7. C++的处理器

    2024-02-22 10:04:01       9 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-22 10:04:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-22 10:04:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-22 10:04:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-22 10:04:01       20 阅读

热门阅读

  1. WebRTC 中带宽估计与拥塞控制算法

    2024-02-22 10:04:01       26 阅读
  2. Tomcat线程池原理(下篇:工作原理)

    2024-02-22 10:04:01       29 阅读
  3. springcloud多网卡注册nacos时IP控制方法

    2024-02-22 10:04:01       23 阅读
  4. 人工智能与开源机器学习框架

    2024-02-22 10:04:01       31 阅读
  5. [OpenGL教程05 ] glAccum() 函数对累积缓存设置

    2024-02-22 10:04:01       23 阅读
  6. spring缓存的使用

    2024-02-22 10:04:01       28 阅读