Csharp/C Sharp/Language Basics/Preprocessor Directives
Версия от 15:31, 26 мая 2010; (обсуждение)
Содержание
- 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
/*
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);
}
}
Demonstrate #elif
/*
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.");
}
}
Demonstrate #else
/*
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.");
}
}
Demonstrate #if, #endif, and #define
/*
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.");
}
}
Demonstrates the use of a conditional method
/*
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");
}
}
}
}
line number
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.
}
}
precompile marco: define, undef, elif, endif
#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
}
}
Preprocessor 2
/*
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
}
}
#undef, #elif, and #else preprocessor directives
/*
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);
}
}
#undef Marco
#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
}
}
Use a symbol expression
/*
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.");
}
}
Use marco to define flag variable
#define DEBUGGING
using System;
class Starter {
#if DEBUGGING
static void OutputLocals() {
Console.WriteLine("debugging...");
}
#endif
static void Main() {
#if DEBUGGING
OutputLocals();
#endif
}
}