zoukankan      html  css  js  c++  java
  • C#预编译指令

    下面对C#中的预编译指令进行介绍:

    1.#define和#undef

    用法:

          #define DEBUG 
          #undef DEBUG

          #define告诉编译器,我定义了一个DEBUG的一个符号,他类似一个变量,但是它没有具体的值,可以将它看为一个符号而已。#undef就是删除这个符号的定义。如果符号DEBUG没定义过,则#undef不起作用,否则#define不起作用。二者都必须放在源代码之前。二者的顺序看代码的顺序:

          #define DEBUG 
         #undef  DEBUG

          这样的话,DEBUG是没有定义的,如果二者换个顺序,编译器就认为DEBUG被定义了

    2.#if、#elif、#else、#endif

          这个告诉编译器进行编译代码的流程控制。考虑下面代码:

                #if DEBUG
                      Console.Write("debug");
                #elif RELEASE
                      Console.Write("release");
                #else
                      Console.Write("other");
                #endif

          以上代码就是说如果定义了DEBUG则输出debug,定义了RELEASE,则输出realse,否则输出other。如果定义了DEBUG和REALSE会怎么样呢?各位可以自己试一下。

    3.#warning、#error

          通过这两个指定可以告诉编译器,出一个警告还是错误信息。除了错误信息以后,编译将停止。

          参考下面的代码(C#在Debug状态下自动定义DEBUG标志,但Release状态不会自动定义RELEASE标志):

                #if DEBUG                         
                      #warning 现在是Debug状态
                #elif RELEASE
                      #warning 现在是Release状态
                #else
                      #error 并清楚什么状态
                #endif

    4.#region 和#endregion

          这个两个用来组成代码块

    5.#line

          这个指令可以改变编译器在警告和错误信息中显示的文件名和行号信息,用#line default把行号恢复为默认的行号。

          #line [ number ["file_name"] | default ]

          number
                要为源代码文件中后面的行指定的编号。
          "file_name"(可选)
                希望出现在编译器输出中的文件名。默认情况下,使用源代码文件的实际名称。文件名必须括在双引号 ("") 中。
          default
                重置文件中的行编号。
          备注
                #line 可能由生成过程中的自动中间步骤使用。例如,如果中间步骤从原始的源代码文件中移除行,但是您仍希望编译器基于文件中的原始行号生成输出,则可以移除行,然后用 #line 模拟原始行号。

          下面的示例说明如何报告与行号关联的两个警告。#line 200 指令迫使行号为 200(尽管默认值为 #7)。另一行 (#9) 作为默认 #line 指令 的结果跟在通常序列后。

    示例1:

          // preprocessor_line.cs
          public class MyClass2
          {
                public static void Main()
                {
                      #line 200
                      int i;       // line 200
                      #line default
                      char c;  // line 9
                }
          }

    示例2:

          下面的示例说明调试器如何忽略代码中的隐藏行。运行此示例时,它将显示三行文本。但是,当设置如示例所示的断点并按 F10 键逐句通过代码时,您将看到调试器忽略了隐藏行。另请注意,即使在隐藏行上设置断点,调试器仍会忽略它。

         // preprocessor_linehidden.cs
          using System;
          class MyClass
          {
                public static void Main()
                {
                      Console.WriteLine("Normal line #1.");  // Set a break point here.
                      #line hidden
                      Console.WriteLine("Hidden line.");
                      #line default
                      Console.WriteLine("Normal line #2.");
                }
          }

    6.#pragma

           可以抑制或恢复指定的编译警告。与命令行选项不同,#pragma指令可以在类和方法上执行,对抑制什么警告和抑制的时间进行更精细的控制。

           #pragma warning disable 169
           public class Aclass
           {
                   int nFiled;
           }
           #pragma warning restore 169

  • 相关阅读:
    linux mysql添加用户
    linux mysql为root用户初始化密码和改变root密码
    linux pts/0的含义
    mysql查看表的结构
    linux踢人命令 pkill踢人用法
    linux查看在线用户 who命令参数及用法
    linux mysql数据库安装(tar.gz)
    vue app外卖(5) 使用swiper 进行图片轮播
    element-UI 点击一行,背景色变化
    vue 外卖app(3) 利用slot分发内容
  • 原文地址:https://www.cnblogs.com/moss_tan_jun/p/2611964.html
Copyright © 2011-2022 走看看