[C#]C#补习——预处理器指令相关

      前一篇文章记录了C#中流程控制语句的相关知识点,这篇则是介绍C#中的预处理器指令,C#预处理器的指令可以让编译器做许多C#基本语法所做不到的事情,这块我以前也仅仅是看过并没有实际使用过,正好这次乘着这次补习下,这篇文章记录了2点我认为对我来说比较实用的知识点。

以下是本文所要介绍的内容:

1、#IF与Debug、.NET版本

2、编译器的警告与禁用警告

3、其他常用预编译器指令

 

一、#IF与Debug、.NET版本

      无论在什么情况下,if条件判断语句总是最常见的,而编译器的这个#IF则更为有用,比如可以#IF来判断当前的.NET版本,当前是还是release状态。

例如在DiscuzNt的代码中就有相应的示例,就是在debug状态如果访问论坛页面,那么在页面的底部就会将该页面所执行的所有SQL存储过程、存储过程参数值、执行时间进行显示,大大方便了日常调试、优化工作,如下图:

pic114

而相应的#IF预处理器指令实用起来也很方便,如下代码:

#define DEBUG
#if DEBUG
    //dosomething
#endif

以上的代码事先使用#define来定义一个符号,然后通过#IF来判断是否为true,#IF的使用语法和VB.NET有点类似,需要以#endif结尾,否则会出错。

同时还可以通过#IF来判断当前的C#版本,如下代码:

#if CSHARP2
using System.Collections.Generic;
#endif

上面的代码则是判断如果当前.NET版本为C#2.0时引入System.Collections.Generic这个命名空间,这种在对于多版本支持的程序开发时很有用。

同样的在预处理器指令中还有#else,#elif这种与C#中if语法想同的指令,这样组合起来使用效果会更好,引用下MSDN的例子:

// preprocessor_if.cs
#define DEBUG#define VC_V7
using System;
public class MyClass 
{
    static void Main() 
    {
#if (DEBUG && !VC_V7)
        Console.WriteLine("DEBUG is defined");
#elif (!DEBUG && VC_V7)
        Console.WriteLine("VC_V7 is defined");
#elif (DEBUG && VC_V7)
        Console.WriteLine("DEBUG and VC_V7 are defined");
#else
        Console.WriteLine("DEBUG and VC_V7 are not defined");
#endif
    }
}

以上的代码就是根据编译器的不用版本和状态来输出相应的字符串。

 

二、编译器的警告与禁用警告

     在日常开发的过程中我们总是会经常对代码进行编译,而在编译的过程中会出现许多信息,许多无用的警告信息总是会在便一点过程中提示出来,以干扰一些主要的警告,对此也是可以通过预处理器指令来进行关闭来阻止其显示,常见的警告如下(CS1591、CS1573等):

pic115

例如其中的CS1591就是由于在为程序集生成DLL是同时生成XML注释时,没有指定相应的XML注释而产生的,对于此类常见的警告我们完全可以忽略或者关闭掉,因为其对程序没有任何影响,此时就可以通过#pragma warning来关闭或者开启,如下代码:

#pragma warning disable/restore 1591

其中disable/restore分别代表了禁用和开启警告,而后面的编号则代表了警告的编号,此处编写警告编号时无需以“CS”开头。

而这句代码只需书写在需要禁用或者开启的类文件中即可,这样此类对应的1591警告就不会出现了。

但是需要注意的是#pragma warning只对单个文件有作用,如果想禁用多个文件的警告可以使用编译器的/nowarn指令,具体可以见MSDN:点我进入

PS:#pragma 是一个单独的指令,而warning只是其中一个选项,#pragma的作用是:用于给编辑器提供特殊的指令,说明如何编译包含杂注的文件。

 

 

三、其他常用预编译器指令

      预编译器指令还有许多,就不一一详解了,下面仅仅列举下并进行简单介绍,详细可以查看MSDN:点我进入

1、#undef,与#define对应,取消定义符号

使用方法:

#undef DEBUG

 

2、#warning,警告,用于自定义警告

使用方法:

#warning “这是一个警告”

 

3、#line,行号,改变编译器错误或警告报警的行号

使用方法:

12(实际行号) #line 50 “Program.cs”   //更改行号为50

  #line default //恢复默认行号

 

4、#error,错误,用于在特定位置生成错误

使用方法:

#error 这是一个错误

 

5、#region #endregion,折叠代码块

使用方法:

#region A

int a=0;

#endregion

posted @ 2010-12-30 14:06  kyo-yo  阅读(2266)  评论(6编辑  收藏