阅读(2092) (0)

C# 预处理器指令

2017-01-22 16:14:47 更新

C# 预处理器指令

预处理器指令为编译器提供有关代码区域的附加信息。

最常见的预处理器指令是条件指令。

例子:


#define DEBUG

class MyClass{
   int x;
   void OneMethod(){
       #if DEBUG
          Console.WriteLine ("Testing: x = {0}", x);
       #endif
   }
    ...
}

在上面的代码中,OneMethod被编译为有条件地依赖于DEBUG符号的存在。

如果我们删除DEBUG符号,则不编译该语句。

使用#if和#elif指令,我们可以使用||,&&和!运算符执行或,和,而不是对多个符号的运算。

如果定义了TESTMODE符号并且未定义DEBUG符号,则以下指令指示编译器包括以下代码:


#if TESTMODE && !DEBUG
...

#error和#warning符号防止意外误用条件指令。

例子

下表列出了预处理器伪指令。

预处理器指令Action
#define symbol定义符号
#undef symbol未定义符号
#if symbol[operator symbol2]...符号到测试运算符是==,!=,&&和||后跟#else,#elif和#endif
#else对随后的#endif执行代码
#elif symbol[operator symbol2]结合#else分支和#if测试
#endif结束条件指令
#warning text在编译器中输出警告文本
#error text在编译器中输出错误文本
#pragma warning [disable | restore]禁用或恢复编译器警告
#line [number["file"] | hidden]number指定源代码中的行; file是在计算机输出中出现的文件名;
#region name标记轮廓的开始
#endregion结束轮廓区域

编译警告

为此,编译器允许您使用#pragma warning指令选择性地抑制警告。

在这个例子中,我们指示编译器不要警告我们消息未被使用的字段:


public class Foo{
   static void Main() { }
   #pragma warning disable 414
      static string Message = "Hello";
   #pragma warning restore 414
}

省略#pragma warning指令中的数字将禁用或恢复所有警告代码。

我们可以使用/warnaserror编译代码,以告诉编译器将任何残留警告视为错误。