• C# 预处理器指令


    http://msdn.microsoft.com/zh-cn/library/ed8yd1ha(v=VS.80).aspx

    以下转自:http://www.bianceng.cn/Programming/csharp/200910/11700.htm

    C#有许多名为预处理器指令的命令。这些命令从来不会被翻译为可执行代码中的命令,但会影响编译过程的各个方面。例如,预处理器可禁止编译器编译代码的某一部分。如果计划发布两个版本的代码,比如基本版本和企业版本,或者针对不同的.NET Framework版本进行编码,就可以使用这些指令。在Anthem.NET的代码中我们经常可以看到这种用法。

    预处理器指令的开头都有符号#。

    注意:

    C#中并没有一个像C++那样的独立预处理器,所谓的预处理器指令仍由编译器处理。

    下面将对这些指令逐一介绍。

    1. #define和#undef

    #define可以定义符号。当将符号用作传递给#if指令的表达式时,此表达式的计算结果true。如

    #define DEBUG

    它告诉编译器存在给定名称的符号,在本例中是DEBUG。这个符号不是实际代码的一部分,只在编译代码时存在。

    #undef正好相反,它删除一个符号。

    必须把#define和#undef命令放在C#源码的开头,即在要编译的任何代码之前。它不像C++中那样可以定义常数值。

    #define本身并无大用,它需要配合#if指令使用。

    #define DEBUG
    int DoSw(double x)
    {
    #if DEBUG
    COnsole.WriteLine("x is"+X);
    #edif
    }

    2. #if, #elif, #else和#endif

    这些指令告诉编译器是否要编译某个代码块。看下面的方法:

    static void PrintVersion()
      {
        #if V3
          Console.WriteLine("Version 3.0");
        #elif V2
          Console.WriteLine("Version 2.0");
        #else
          Console.WriteLine("Version 1.0");
        #endif
      }

    上面的代码会根据定义的符号来打印不同的版本信息。 这种方式成为条件编译。

    注意:

    使用#if不是条件编译代码的唯一方式,C#还提供了通过Conditional属性的机制。

    #if和#elif还支持一组逻辑运算符!=,==,!=和|| 。如果符号存在,符号的值被认为是true,否则为false,如:

    #if V3 || (V2 == true) // if 定义了V3或V2符号...

    3. #warning和#error

    这也是两个很有用的预处理器指令,编译器遇到它们时,会分别产生警告或错误信息。如果遇到#warning指令,会向用户显示#warning指令后面的文本。实际上,在VS2005中,IDE会直接将信息标识出来:

    C#预处理器指令

    而如果编译器遇到#error,就会立即退出编译,不会产生IL代码。

    使用这两个指令可以检查#define是不示做错了什么事,使用#warning可以让自己想起做什么事。

    #if DEBUG && RELEASE
    #error "You 've define xxxx!"
    #ednif
    #warning "Don't forgot to removexxxxxx!"
    Console.WriteLine("I have this job");

    4. #region和#endregion

    #region和#endregion指令用于把一段代码标记为有指定名称的一个块,如下所示:

    #region private methods
      private int x;
      private int y;
      #endregion

    这两个指令不会影响编译过程。但可以为VS编辑器所识别,从而使得代码显示布局更为清晰。

    5. #line

    可以用于改变编译器在警告和错误信息中显示的文件的名字和行号信息。如果编写代码时,在把代码发给比编译器前,要使用某些软件包改变键入的代码,玖可以使用者个指令,因为这意味着比编译器的报告的行号或文件名与文件中的行号或编译的文件名不匹配。#line指令可以用于恢复这种匹配也可以使用语法#line default 把行号恢复默认。

    #line 164 "cORE.CS"

    #LINE default

    6. #pragma,#pragma warning,#pragma checksum

    #pragma:为编译器提供特殊的指令,说明如何编译包含杂注的文件。

    #pragma warning:可启用或禁用某些警告。

    #pragma checksum:生成源文件的校验和,以帮助调试ASP.NET页。

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

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

    #pragma warning restore 169

  • 相关阅读:
    2022北航软件研究生入学考试991考试大纲-数据结构与C
    pgsql 学习
    Java开发必须掌握的 20+ 种 Spring 常用注解
    Spring 学习总结
    Spring MVC快速入门教程
    spring boot与spring mvc的区别是什么?
    Java知识体系最强总结(2020版)
    arthas(阿尔萨斯)使用实践----查看慢方法 /方法耗时等
    JVM --------jmap-----查看堆内存信息、生成heap dump 文件(转储堆内存快照到指定文件)
    [JVM】jstat命令详解---JVM的统计监测工具:jstat 堆内存各部分的使用量,以及加载类的数量。
  • 原文地址:https://www.cnblogs.com/zxhoo/p/1942368.html
Copyright © 2020-2023  润新知