Csharp/C Sharp/Language Basics/Preprocessor Directives
Содержание
- 1 #define, #if, and #endif preprocessor directives
- 2 Demonstrate #elif
- 3 Demonstrate #else
- 4 Demonstrate #if, #endif, and #define
- 5 Demonstrates the use of a conditional method
- 6 line number
- 7 precompile marco: define, undef, elif, endif
- 8 Preprocessor 2
- 9 #undef, #elif, and #else preprocessor directives
- 10 #undef Marco
- 11 Use a symbol expression
- 12 Use marco to define flag variable
#define, #if, and #endif preprocessor directives
<source lang="csharp"> /* Mastering Visual C# .NET by Jason Price, Mike Gunderloy Publisher: Sybex; ISBN: 0782129110
- /
/*
Example4_16.cs illustrates the use of the #define, #if, and #endif preprocessor directives
- /
- define DEBUG
public class Example4_16 {
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); }
}
</source>
Demonstrate #elif
<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852
- /
// Demonstrate #elif.
- define RELEASE
using System;
public class Test5 {
public static void Main() { #if EXPERIMENTAL Console.WriteLine("Compiled for experimental version."); #elif RELEASE Console.WriteLine("Compiled for release."); #else Console.WriteLine("Compiled for internal testing."); #endif #if TRIAL && !RELEASE Console.WriteLine("Trial version."); #endif Console.WriteLine("This is in all versions."); }
}
</source>
Demonstrate #else
<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852
- /
// Demonstrate #else.
- define EXPERIMENTAL
using System;
public class Test4 {
public static void Main() { #if EXPERIMENTAL Console.WriteLine("Compiled for experimental version."); #else Console.WriteLine("Compiled for release."); #endif #if EXPERIMENTAL && TRIAL Console.Error.WriteLine("Testing experimental trial version."); #else Console.Error.WriteLine("Not experimental trial version."); #endif Console.WriteLine("This is in all versions."); }
}
</source>
Demonstrate #if, #endif, and #define
<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852
- /
// Demonstrate #if, #endif, and #define.
- define EXPERIMENTAL
using System;
public class Test1 {
public static void Main() { #if EXPERIMENTAL Console.WriteLine("Compiled for experimental version."); #endif Console.WriteLine("This is in all versions."); }
}
</source>
Demonstrates the use of a conditional method
<source lang="csharp"> /* C# Programming Tips & Techniques by Charles Wright, Kris Jamsa Publisher: Osborne/McGraw-Hill (December 28, 2001) ISBN: 0072193794
- /
// CondMeth.cs -- demonstrates the use of a conditional method // // Compile this program with the following command line: // C:>csc CondMeth.cs //
- define MY_CONDITION
using System; using System.Diagnostics; namespace nsConditional {
public class CondMeth { static public void Main () { clsTest test = new clsTest(42); test.ShowValue (); } } class clsTest { public clsTest (int num) { m_Num = num; } int m_Num; [Conditional("MY_CONDITION")] public void ShowValue() { if (m_Num < 50) { Console.WriteLine (m_Num + " is less than 50"); } } }
}
</source>
line number
<source lang="csharp"> using System; class Operators {
static void Main() {
- line 300
- warning Something happened.
- warning Something else happened.
- line 400 "someotherfile.cs"
- warning Something happened later.
- line default
- warning Nothing else will happen.
}
}
</source>
precompile marco: define, undef, elif, endif
<source lang="csharp">
- define MYOWN
- define DEBUG
- undef VERBOSE
using System; class Operators {
static void Main() {
- if MYOWN
Console.WriteLine("Hi!");
- elif VERBOSE
Console.WriteLine("Program Starting?);
- endif
int a = 10, b = 5;
- if DEBUG
Console.WriteLine("a={0}, b={1}", a, b);
- endif
- if MYOWN && (VERBOSE || DEBUG)
Console.WriteLine("Continuing, Author");
- elif !MYOWN && (VERBOSE || DEBUG)
Console.WriteLine("Continuing?);
- endif
}
}
</source>
Preprocessor 2
<source lang="csharp"> /* C# Programming Tips & Techniques by Charles Wright, Kris Jamsa Publisher: Osborne/McGraw-Hill (December 28, 2001) ISBN: 0072193794
- /
namespace nsPreProc {
using System; public class PreProc { static public void Main() {
- if ALTMAIN
- warning Compiling alternate statement
Console.WriteLine ("Using alternate Main()");
- elif OTHERMAIN
- warning Compiling other statement
Console.WriteLine ("Using other Main()");
- else
- warning Compiling main
Console.WriteLine ("Using Main()");
- endif
}
- line 200
- if SHOWERROR
int iVar;
- error This is line 23 but the error report should show line 202
- endif
}
}
</source>
#undef, #elif, and #else preprocessor directives
<source lang="csharp"> /* Mastering Visual C# .NET by Jason Price, Mike Gunderloy Publisher: Sybex; ISBN: 0782129110
- /
/*
Example4_17.cs illustrates the use of the #undef, #elif, and #else preprocessor directives
- /
- define DEBUG
- undef DEBUG
- define PRODUCTION
public class Example4_17 {
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");
- elif PRODUCTION
System.Console.WriteLine("counter < 5");
- else
System.Console.WriteLine("goto myLabel, counter < 5");
- endif
goto myLabel; } System.Console.WriteLine("total = " + total); }
}
</source>
#undef Marco
<source lang="csharp">
- define MYOWN
- define DEBUG
- undef VERBOSE
- define PROGRAMMER_IS_BRIAN
- undef PROGRAMMER_IS_DAVE
using System; class Preprocessor {
static void Main() {
- if MYOWN
Console.WriteLine("Hi Author!");
- elif VERBOSE
Console.WriteLine("Program Starting?);
- endif
int a = 10, b = 5;
- if DEBUG
Console.WriteLine("a={0}, b={1}", a, b);
- endif
- if MYOWN && (VERBOSE || DEBUG)
Console.WriteLine("Continuing, Author");
- elif !MYOWN && (VERBOSE || DEBUG)
Console.WriteLine("Continuing?);
- endif
- if PROGRAMMER_IS_BRIAN || PROGRAMMER_IS_DAVE
- warning Execution may vary depending on programmer.
- endif
- if PROGRAMMER_IS_DAVE
- error Something you did broke this code.
- endif
}
}
</source>
Use a symbol expression
<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852
- /
// Use a symbol expression.
- define EXPERIMENTAL
- define TRIAL
using System;
public class Test2 {
public static void Main() { #if EXPERIMENTAL Console.WriteLine("Compiled for experimental version."); #endif #if EXPERIMENTAL && TRIAL Console.Error.WriteLine("Testing experimental trial version."); #endif Console.WriteLine("This is in all versions."); }
}
</source>
Use marco to define flag variable
<source lang="csharp">
- define DEBUGGING
using System; class Starter {
- if DEBUGGING
static void OutputLocals() { Console.WriteLine("debugging..."); }
- endif
static void Main() {
- if DEBUGGING
OutputLocals();
- endif
}
}
</source>