Share via


#if (Referencia de C#)

Cuando el compilador de C# detecta una directiva #if, seguida eventualmente de una directiva #endif, compilará el código entre las directivas únicamente si se define el símbolo especificado. A diferencia de C y C++, no se puede asignar un valor numérico a un símbolo; la instrucción #if en C# es booleana y solo comprueba si se ha definido o no el símbolo. Por ejemplo,

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

Los operadores == (igualdad), != (desigualdad) solo se pueden usar para comprobar si el valor es true o false. True significa que se ha definido el símbolo. La instrucción #if DEBUG tiene el mismo significado que #if (DEBUG == true). Los operadores && (y) y || (o) se pueden usar para evaluar si se han definido 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 existencia de uno o varios símbolos. Esto puede ser de 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 MYTEST
using System;
public class MyClass 
{
    static void Main() 
    {
#if (DEBUG && !MYTEST)
        Console.WriteLine("DEBUG is defined");
#elif (!DEBUG && MYTEST)
        Console.WriteLine("MYTEST is defined");
#elif (DEBUG && MYTEST)
        Console.WriteLine("DEBUG and MYTEST are defined");
#else
        Console.WriteLine("DEBUG and MYTEST are not defined");
#endif
    }
}
  

Vea también

Referencia

Directivas de preprocesador de C#

Conceptos

Guía de programación de C#

Otros recursos

Referencia de C#