C#预处理指令

预处理器指令用来在编译开始之前给编译器指示预处理信息。

所有预处理程序指令以符号#开头,并且只有空格字符在一行上,空格符可预处理器指令之前出现。 预处理器指令不是语句,所以它们不以分号(;)结尾。

C# 编译器没有分隔预处理器;,指令被处理为只有一个。 在 C# 中,预处理指令用于指示条件编译。与C语言和C++指令不同,它们不用于创建宏。 预处理程序指令必须是一行中的唯一指令。

C# 预处理器指令

下表列出了 C# 中提供的预处理指令:

预处理指令 描述
#define 定义一个叫作符号的字符序列。
#undef 用于取消定义的符号。
#if 用来测试符号以查看它们是否为真。
#else 用来与#if来创建一个复合条件指令。
#elif 用来创建一个复合条件指令。
#endif 指定条件指令的结束。
#line 用于修改编译器的行号和(可选)修改错误和警告的文件名输出。
#error 用于从代码中的特定位置生成错误。
#warning 用于从代码中的特定位置生成一级警告。
#region 允许您在使用Visual Studio代码编辑器的概述功能时指定可以展开或折叠的代码块。
#endregion 用于标志着#region块的结束。

#define预处理程序

#define预处理程序指令创建符号常量。
#define允许定义一个符号,通过使用该符号作为传递给#if指令的表达式,表达式的计算结果为true。其语法如下:

#define symbol

以下程序演示如何使用#define指令:

#define PI 
using System;
namespace PreprocessorDAppl
{
   class Program
   {
      static void Main(string[] args)
      {
         #if (PI)
            Console.WriteLine("PI is defined");
         #else
            Console.WriteLine("PI is not defined");
         #endif
         Console.ReadKey();
      }
   }
}

当编译和执行上述代码时,会产生以下结果:

PI is defined

条件指令

可以使用#if指令创建条件指令。条件指令用于测试符号检查它们的值是否为真。 如果它们评估求值为true,编译器将评估求值#if到下一个指令之间的所有代码。

条件指令的语法是:

#if symbol [operator symbol]...

其中,符号(symbol)是要测试的符号的名称。也可以使用布尔值:truefalse,或者使用否定运算符加到符号的前面。

运算符符号是用于评估符号的运算符。运算符可以是以下任一项:

  • ==(相等)
  • !=(不等式)
  • &&(和)
  • || (或)

也可以使用括号对符号和运算符进行分组。在用于编译调试版本的代码或编译特定配置时可使用条件指令。 以#if指令开头的条件指令必须明确地使用#endif指令终止。

以下程序演示了条件指令的用法:

#define DEBUG
#define VC_V10
using System;
public class TestClass
{
   public static void Main()
   {
      #if (DEBUG && !VC_V10)
         Console.WriteLine("DEBUG is defined");
      #elif (!DEBUG && VC_V10)
         Console.WriteLine("VC_V10 is defined");
      #elif (DEBUG && VC_V10)
         Console.WriteLine("DEBUG and VC_V10 are defined");
      #else
         Console.WriteLine("DEBUG and VC_V10 are not defined");
      #endif
      Console.ReadKey();
   }
}

当编译和执行上述代码时,会产生以下结果:

DEBUG and VC_V10 are defined

上一篇: C#命名空间 下一篇: C#正则表达式