zoukankan      html  css  js  c++  java
  • .NET 预处理器指令

    • C# 预处理器指令
         虽然编译器没有单独的预处理器,但在处理该节中描述的指令时如同存在一个单独的预处理器;这些指令用于辅助条件编译。 与 C 和 C++ 指令不同,不能使用这些指令创建宏。预处理器指令必须是行上的唯一指令。
    • #if
         如果 C# 编译器遇到最后面跟有 #endif 指令的 #if 指令,则仅当指定的符号已定义时,它才会编译这两个指令之间的代码。 与 C 和 C++ 不同,您不能对符号赋予数值;C# 中的 #if 语句是 Boolean,仅测试符号是否已定义。
      • 代码示例
    #define DEBUG
    #define MYTEST
    using System;
    public class MyClass 
    {
        static void Main() 
        {
    #if (DEBUG && !MYTEST)
            Console.WriteLine("DEBUG is defined");
    #elif (!DEBUG && MYTEST)
            Console.WriteLine("MYTEST is defined");
    #elif (DEBUG && MYTEST)
            Console.WriteLine("DEBUG and MYTEST are defined");
    #else
            Console.WriteLine("DEBUG and MYTEST are not defined");
    #endif
        }
    }
    
    • #else
         #else 允许您创建复合条件指令,因此,如果前面的 #if 或(可选)#elif 指令中的任何表达式都不为 true,则编译器将计算 #else 与后面的 #endif 之间的所有代码。
    • #elif
         #elif 使您得以创建复合条件指令。 如果前导 #if(C# 参考) 和任何可选前导 #elif 指令表达式的计算结果都不是 true,则将计算 #elif 表达式。 如果 #elif 表达式计算为 true,编译器将计算位于 #elif 和下一个条件指令之间的所有代码。
    • #endif
         #endif 指定以 #if 指令开头的条件指令的结尾。
    • # define
         #define 可让您定义符号。 当您将符号用作传递给 #if 指令的表达式时,此表达式的计算结果为 true。不能像在 C 和 C++ 中的通常做法一样,使用 #define 指令来声明常数值。最好是将 C# 中的常数定义为类或结构的静态成员。如果具有多个像这样的常数,可以考虑创建一个单独的“Constants”类来保存这些常数。
    • #undef
         #undef 使您可以取消符号的定义,以便通过将该符号用作 #if 指令中的表达式,使表达式的计算结果为 false。
    可以使用 #define 指令或 /define 编译器选项定义符号。 在使用任何不是指令的语句之前,必须在文件中使用 #undef 指令。
      • 代码示例
    #undef DEBUG
    using System;
    class MyClass 
    {
        static void Main() 
        {
    #if DEBUG
            Console.WriteLine("DEBUG is defined");
    #else
            Console.WriteLine("DEBUG is not defined");
    #endif
        }
    }
    
    • #warning
         #warning 使您得以从代码的特定位置生成一级警告。#warning 通常用在条件指令中。也可以用 #error生成用户定义的错误。
      • 代码示例
    #define DEBUG
    class MainClass 
    {
        static void Main() 
        {
    #if DEBUG
    #warning DEBUG is defined
    #endif
        }
    }
    
    • #error
         #error 使您可以从代码中的特定位置生成错误。#error 通常用在条件指令中。
      • 代码示例
    #define DEBUG
    class MainClass 
    {
        static void Main() 
        {
    #if DEBUG
    #error DEBUG is defined
    #endif
        }
    }
    
    • #line
         #line 使您可以修改编译器的行号以及(可选)错误和警告的文件名输出。 下面的示例说明如何报告与行号关联的两个警告。 #line 200 指令将行号强制设置为 200(尽管默认行号为 #7),在执行下一条 #line 指令之前,文件名将报告为“Special”。 #line default 指令将行号恢复为默认行号,默认行号对前一条指令重新编号的行进行计数。
      • 代码示例
    class MainClass
    {
        static void Main()
        {
    #line 200 "Special"
            int i;    // CS0168 on line 200
            int j;    // CS0168 on line 201
    #line default
            char c;   // CS0168 on line 9
            float f;  // CS0168 on line 10
    #line hidden // numbering not affected
            string s; 
            double d; // CS0168 on line 13
        }
    }
    
    • #region
         #region 使您可以在使用 Visual Studio 代码编辑器的大纲显示功能时指定可展开或折叠的代码块。 在较长的代码文件中,能够折叠或隐藏一个或多个区域会十分便利,这样,您可将精力集中于当前处理的文件部分。 #region 块必须以 #endregion 指令终止。#region 块不能与 #if 块重叠。但是,可以将 #region 块嵌套在 #if 块内,或将 #if 块嵌套在 #region 块内。
      • 代码示例
    #region MyClass definition
    public class MyClass 
    {
        static void Main() 
        {
        }
    }
    #endregion
    
    • #endregion
         #endregion 标记 #region 块的结尾。
    • #pragma
         #pragma 为编译器提供特殊的指令,以说明如何编译包含杂注的文件。 这些指令必须是编译器支持的指令。 也就是说,不能使用 #pragma 创建自定义预处理指令。
      • 代码示例
    #pragma pragma-name pragma-arguments
    
    • #pragma warning
         #pragma warning 可启用或禁用某些警告。
      • 代码示例
    #pragma warning disable warning-list
    #pragma warning restore warning-list
    
    • #pragma checksum
         生成源文件的校验和,以帮助调试 ASP.NET 页。
      • 代码示例
    #pragma checksum "filename" "{guid}" "checksum bytes"
    
  • 相关阅读:
    2018第九届蓝桥杯C/C++ B国赛 —— 第三题:格雷码
    数据结构和算法 —— 谈谈算法
    数据结构和算法 —— 谈谈算法
    数据结构和算法 —— 绪论
    数据结构和算法 —— 绪论
    2018第九届蓝桥杯C/C++ B国赛 —— 第二题:激光样式
    2018第九届蓝桥杯C/C++ B国赛 —— 第二题:激光样式
    2018第九届蓝桥杯C/C++ B国赛 —— 第一题:换零钞
    围棋
    恶搞造句
  • 原文地址:https://www.cnblogs.com/liusuqi/p/3130472.html
Copyright © 2011-2022 走看看