En la programación de computadoras, la compilación condicional describe la capacidad de un compilador de software o procesador de código fuente para incluir o ignorar ciertos comandos o bloques de código basados en instrucciones específicas del lenguaje que técnicamente no son parte de la especificación del lenguaje de programación central. Los comandos que se utilizan para activar la compilación condicional en un programa a menudo se denominan directivas de preprocesador, aunque también se pueden conocer como directivas de compilación, comentarios condicionales o definiciones condicionales. Según el compilador o el lenguaje que se utilice, las directivas condicionales pueden ser variables o macros definidas por el usuario, o también pueden ser variables del sistema establecidas por el compilador o el sistema operativo. La compilación condicional se utiliza con frecuencia para configurar un único conjunto de archivos de código fuente para que puedan compilarse en diferentes entornos o sistemas operativos sin tener que intercambiar o cambiar los archivos fuente.
Las definiciones condicionales que se utilizan para probar la compilación condicional pueden variar de un idioma a otro, pero generalmente son macros u otras expresiones de metadatos fuera del alcance de las variables normales del programa. En lenguajes como C, las variables suelen ser macros que lee un preprocesador. La mayoría de las veces, las macros no son accesibles mediante el código fuente del programa ejecutable real, aunque existen en los mismos archivos fuente.
Las directivas que se utilizan para probar las variables condicionales definidas son rudimentarias y siguen la misma lógica que una declaración si-entonces. Las pruebas básicas que se pueden realizar para la compilación condicional son si un valor está definido, no definido o, en algunos casos, si dos variables definidas son equivalentes. Las variables o macros en sí mismas generalmente no tienen ningún valor de importancia, porque el acto de definirlas es lo que están verificando las directivas. Sin embargo, con algunos lenguajes y compiladores, el valor de una variable definida puede ser importante si se evalúan para el estado booleano.
Cuando un compilador encuentra directivas utilizadas para la compilación condicional, las directivas se evalúan para ver si se prueban como verdaderas o falsas. Si es verdadero, el código que sigue la directiva se compila normalmente; de lo contrario, el compilador omitirá por completo el código contenido en la directiva. Esto es diferente a las declaraciones de lógica condicional dentro del propio código del programa ejecutable porque, incluso si la lógica tiene un bloque de código que no se puede ejecutar, se interpretará y compilará en la mayoría de los casos. Con las directivas condicionales de preprocesador, el código omitido nunca se incluye, interpreta o compila. También debe tenerse en cuenta que una vez que el preprocesador ha evaluado todas las variables condicionales y directivas, no se compilan con el resto del programa, ya que solo están destinadas a proporcionar una dirección al compilador.
La compilación condicional se utiliza con mayor frecuencia para incluir o excluir código específico de un sistema operativo o entorno en particular. Esto significa que las bibliotecas que existen en un sistema operativo se pueden incluir condicionalmente si las directivas determinan que el programa se está compilando bajo ese sistema operativo. Alternativamente, las directivas también se pueden usar para incluir o excluir código basado en variables definidas por el usuario. Esto se puede hacer para que el código de depuración o creación de perfiles no se incluya en la versión final de un programa, o para que ciertas funciones se puedan habilitar o deshabilitar sin tener que mantener copias separadas del código.