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

    C#预处理指令基本概念

    虽然同C和C++的术语“预处理指令”名称一样,但C#的其实并没有单独的预处理步骤,也就是说在VS等环境中并没有预处理的编译器。

    预处理指令能够用于替换源文件中的信息。以#(Sharp)字符和预处理指令名称开头。例如:

    #define MAX

    习惯于将预处理指令的名称全部设为大写。和C与C++不同的是,C#中的预处理指令的名称后不加数字等。CC++所支持的宏函数在C#中也是不支持的。

    还可以使用#region来设置一个区域,同时也可以通过Visual Studio让代码折叠。往往在#region后加上该区域的名称的字符串,可以实现注释的作用。

    #region C#预处理指令
    #endregion

    5个预处理指令

    1.#undef

    上面我们使用了#define,其实还是有#undef的。那么它又是做什么的呢?

    #define MAX
    static void Main(string[] args)  
    {
        #if (MAX)  
           Console.WriteLine("MAX已经定义了。");
        #endif
    }

    如果我们Debug程序,就会在控制台看到这样一条:

    MAX已经定义了。

    如果我们Release程序,得到的结果也还是一样的,但是如果在代码开头加上:

    #undef MAX

    再来Debug控制台就不会有消息提示了。

    2.#if、#else、#elif

    如果想要控制台显示MAX没有定义的情况,那就用#else来搭配#if就可以了。

    #if (MAX) 
        Console.WriteLine("MAX已经定义了。");
    #else     
        Console.WriteLine("MAX还没有定义。");
    #endif

    或许你在键入#else的时候也看到了#elif,这个自然就是对应的else if了。它们的逻辑和常规的if套装是一样的。

    #define MAX
    #undef MAX
    #define MIN
    
    static void Main(string[] args)   
    {
    #if (MAX)  
         Console.WriteLine("MAX已经定义了。");
    #elif (MIN)   
         Console.WriteLine("MIN已经定义了。");
    #else           
         Console.WriteLine("MAX还没有定义。");
    #endif          
         Console.ReadLine();        
    }

    3.#warning、#error

    这两个预处理指令用于抛出异常和错误。

    #warning 这是一个强制抛出的异常。

    这里写图片描述

    #error 这是一个强制抛出的错误。

    这里写图片描述

    4.#line

    我们还可以用#line将以下#error这行代码的行数设置为10000行,并将文件名设置为”错误“。

    static void Main(string[] args)     
    {
    #line 10000 "错误"
    #error 这是一个强制抛出的错误。  
    }

    这里写图片描述

    如果我们再添加这样一行代码,则会将行数和文件名恢复为默认的。

    #line 10000 "Error"
    #error 这是一个强制抛出的错误。
    #line default
    #warning 这是一个强制抛出的警告。

    这里写图片描述

    5.#pragma

    我们先在Program类前加上这样一行代码,它会引发CS3021错误。

     [CLSCompliant(false)]    

    然后我们在上面这行代码前加入以下这行代码,其作用是禁用warning 3021。那么再次Debug就会发现原本的错误已经不在了。

    #pragma warning disable 3021    

    如果想要在后文中恢复这个CS3021错误,就用restore即可。

    #pragma warning restore 3021    

    以下是完整代码。

    #pragma warning disable 3021    
      [CLSCompliant(false)]    
      class Program    
      {                             
          static void Main(string[] args)        
          {}
      }
    #pragma warning restore 3021    
      [CLSCompliant(false)]    
      public class OtherProgram    
      {                            
          public static void OtherMain()        
          {}
      }

    这个预处理指令其实是非常复杂的,在各大百科上已经有了相关介绍,以下是维基百科上的。传送门:pragma once



    感谢访问,希望对您有所帮助。 欢迎关注或收藏、评论或点赞。


    为使本文得到斧正和提问,转载请注明出处:
    http://blog.csdn.net/nomasp


    版权声明:本文为 NoMasp柯于旺 原创文章,如需转载请联系本人。

  • 相关阅读:
    PHP保留小数的相关方法
    ASP.NET Core MVC 之过滤器(Filter)
    ASP.NET Core MVC 之控制器(Controller)
    ASP.NET Core MVC 之视图组件(View Component)
    ASP.NET Core MVC 之局部视图(Partial Views)
    标签助手(TagHelper)
    ASP.NET Core MVC 之布局(Layout)
    ASP.NET Core MVC 之视图(Views)
    ASP.NET Core MVC 之模型(Model)
    九卷读书:淘宝从小到大的发展 -重读《淘宝技术这十年》
  • 原文地址:https://www.cnblogs.com/NoMasp/p/4786023.html
Copyright © 2011-2022 走看看