Conditional compilation

C# uses the preprocessor directives to control the compilation.

The preprocessor directives begin with # and it must appear on its own line.

The preprocessor directives conditional compilation is #if, #else and, #endif, and #elif.

The #if directive tells the compiler to ignore a section of code unless a specified symbol has been defined.

To define a symbol we use the #define or set it in the compilation.

#define directives must be at top of file.

Symbol names are uppercase by convention.


#define TESTMODE
using System;

class Program
{
    static void Main()
    {
#if TESTMODE
        Console.WriteLine("in test mode!"); // OUTPUT: in test mode!
#endif
    }
}

The output:


in test mode!

To define a symbol assembly-wide, specify the /define switch when compiling:

csc Program.cs /define:TESTMODE,ANOTHER

Preprocessor directivesC# statements
#ifif
#elseelse
#elif or #else #ifelse if

The ||, &&, and ! operators can be used to perform or, and, and not operations.

Logical Operators Supported by the #if..#endif Directive

OperatorExampleDescription
==#if winXP == trueEvaluates to true if the symbol winXP is defined. Equivalent to #if winXP.
!=#if winXP != trueEvaluates to true if the symbol winXP is not defined. Equivalent to #if !winXP.
&& #if winXP && release Evaluates to true only if the symbols winXP and release are defined.
||#if winXP || releaseEvaluates to true if either of the symbols winXP or release are defined.
() #if (winXP || win7) && release Parentheses allow you to group expressions. Evaluates to true if the symbols winXP or win7 are defined and the symbol release is defined.

The following code uses #define, #undef, #elif and #else to do the conditional compilation.


#define win7
#define release
#undef  win2000

using System;
using System.Diagnostics;

class MainClass
{
    [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 win7        // Compiling for Windows 7
        platformName = "Microsoft Windows 7";
#else              // Unknown platform specified 
                   platformName = "Unknown"; 
#endif

        Console.WriteLine(platformName);
    }
}

To build the example and define the symbols winXP, use the command csc /define:winXP; Example.cs.

java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.