#if (Referencia de C#)

Actualización: noviembre 2007

#if permite iniciar una directiva condicional que compruebe si uno o varios símbolos se evalúan o no como true. Si se evalúan como true (se cumple la condición), el compilador incluye en la compilación todo el código comprendido entre #if y la directiva #endif más cercana. Por ejemplo,

#define DEBUG
// ...
#if DEBUG
    Console.WriteLine("Debug version");
#endif

Se pueden utilizar los operadores == (igualdad), != (desigualdad), && (y) o || (o) para evaluar varios símbolos. Es posible agrupar símbolos y operadores mediante paréntesis.

Comentarios

#if, junto con las directivas #else, #elif, #endif, #define y #undef, permite incluir o excluir código basándose en la condición de uno o más símbolos. Esto puede ser de gran utilidad si se compila código para una versión de depuración o para una configuración específica.

Una directiva condicional que empieza con una directiva #if debe terminarse explícitamente con una directiva #endif.

#define permite definir un símbolo tal que, si se utiliza como expresión de la directiva #if, la expresión se evaluará como true.

También se puede definir un símbolo con la opción /define del compilador. La definición de un símbolo se puede anular mediante la directiva #undef.

Un símbolo definido mediante /define o #define no debe entrar en conflicto con una variable del mismo nombre. Es decir, no se debería utilizar un nombre de variable en una directiva de preprocesador ni evaluar un símbolo (constante simbólica) fuera de una directiva de preprocesador.

El ámbito de un símbolo creado mediante #define corresponde al archivo en el que se ha definido.

Ejemplo

// preprocessor_if.cs
#define DEBUG#define VC_V7
using System;
public class MyClass 
{
    static void Main() 
    {
#if (DEBUG && !VC_V7)
        Console.WriteLine("DEBUG is defined");
#elif (!DEBUG && VC_V7)
        Console.WriteLine("VC_V7 is defined");
#elif (DEBUG && VC_V7)
        Console.WriteLine("DEBUG and VC_V7 are defined");
#else
        Console.WriteLine("DEBUG and VC_V7 are not defined");
#endif
    }
}

DEBUG and VC_V7 are defined

Vea también

Conceptos

Guía de programación de C#

Referencia

Directivas de preprocesador de C#

Otros recursos

Referencia de C#