Csharp/C Sharp/Development Class/Macro

Материал из .Net Framework эксперт
Версия от 11:43, 26 мая 2010; Admin (обсуждение | вклад) (1 версия)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Define macro for conditional compile

#define win2000
#define release
#undef  win98
using System;
using System.Diagnostics;
    class Test
    {
        [Conditional("DEBUG")]
        public static void DumpState()
        {
            Console.WriteLine("Dump some state...");
        }
        public static void Main()
        {
            string platformName;
            #if winXP       // Compiling for Windows XP
                platformName = "Microsoft Windows XP";
            #elif win2000   // Compiling for Windows 2000
                platformName = "Microsoft Windows 2000";
            #elif winNT     // Compiling for Windows NT
                platformName = "Microsoft Windows NT";
            #elif win98     // Compiling for Windows 98
                platformName = "Microsoft Windows 98";
            #else           // Unknown platform specified
                platformName = "Unknown";
            #endif
            Console.WriteLine(platformName);
            // Call the conditional DumpState method
            DumpState();
        }
    }


Macro in action

using System;
class Class1{
  static void Main(string[] args)  {
    #if false
      Console.WriteLine("A");
    #elif false
      Console.WriteLine("B");
    #else
            Console.WriteLine("C");
      #endif
  }
}


The use of the #define, #if, and #endif preprocessor directives

#define DEBUG
   
class Test 
{
  public static void Main() 
  {
    int total = 0;
    int counter = 0;
   
    myLabel:
    counter++;
    total += counter;
    System.Console.WriteLine("counter = " + counter);
    if (counter < 5) {
#if DEBUG
      System.Console.WriteLine("goto myLabel");
#endif
      goto myLabel;
    }
   
    System.Console.WriteLine("total = " + total);
   
  }
   
}


#undef, #elif, and #else preprocessor directives

#define DEBUG
#undef DEBUG
#define PRODUCTION
   
class Test {
  public static void Main() {
    int total = 0;
    int counter = 10;
   
    myLabel:
    System.Console.WriteLine("counter = " + counter);
    if (counter < 5) {
#if DEBUG
      System.Console.WriteLine("goto myLabel");
#elif PRODUCTION
      System.Console.WriteLine("counter < 5");
#else
      System.Console.WriteLine("goto myLabel, counter < 5");
#endif
      goto myLabel;
    }
    System.Console.WriteLine("total = " + total);
  }
}