Csharp/C Sharp/Development Class/Macro
Содержание
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);
}
}