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

    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

  • 相关阅读:
    C# 对XML操作-实例
    XML
    得到一个随机数组的方法
    Node Redis 小试
    Hexo快速搭建静态博客并实现远程VPS自动部署
    substr.js 字符串切割
    GraphicsMagick 学习笔记
    store.js 跨浏览器的localStorage
    bodyParser中间件的研究
    Sublime Text 使用指南
  • 原文地址:https://www.cnblogs.com/NoMasp/p/4444109.html
Copyright © 2011-2022 走看看