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 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。如果它们的评估结果为true,则编译器将评估#if和next指令之间的所有代码。
    条件指令的语法是-
    
    #if symbol [operator symbol]...
    
    其中,symbol是要测试的符号的名称。您还可以使用true和false或在符号前加上取反运算符。
    该运算符号是用于评估的符号操作。运算符可以是以下任一种-
    • == (相等)
    • != (不等)
    • && (and)
    • || (or)
    您也可以用括号将符号和运算符分组。条件指令用于为调试版本或为特定配置进行编译时编译代码。以#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