En programación informática , la compilación condicional es una técnica que genera programas ejecutables diferentes según los parámetros especificados. Esta técnica se utiliza comúnmente cuando se necesitan estas diferencias en el programa para ejecutarlo en distintas plataformas o con distintas versiones de las bibliotecas o el hardware requeridos .
Muchos lenguajes de programación admiten la compilación condicional. Normalmente, las directivas del compilador definen o "anulan la definición" de ciertas variables ; otras directivas prueban estas variables y modifican la compilación en consecuencia. Por ejemplo, sin usar un lenguaje específico, el compilador puede configurarse para definir "Macintosh" y anular la definición de "PC", y el código puede contener:
(* Código genérico del sistema *) si mac ! = Nulo entonces (* Código específico de macOS *) de lo contrario si pc ! = Nulo (* Código específico de Windows *)En C y algunos lenguajes con una sintaxis similar, esto se hace utilizando una directiva '#ifdef' .
Microsoft Internet Explorer, desde la versión 5 hasta la 9 , utiliza un procedimiento similar, denominado "comentario condicional", para interpretar el código HTML . También existe un mecanismo propietario similar para añadir comentarios condicionales en JScript , conocido como compilación condicional. [ 1 ]
Ejemplos
C# proporciona directivas de preprocesador para la compilación condicional. [ 2 ]
#if DEBUG Console.WriteLine ( "Versión de depuración " ) ; #endifRust admite la compilación condicional. [ 3 ]
#[cfg_attr(target_os = "linux" , path = "linux.rs" )] #[cfg_attr(windows, path = "windows.rs" )] mod os ;Crítica
Cuando la compilación condicional depende de demasiadas variables, puede dificultar el razonamiento sobre el código, ya que el número de posibles combinaciones de configuración aumenta exponencialmente. [ 4 ] [ 5 ] [ 6 ] Cuando la compilación condicional se realiza mediante un preprocesador que no garantiza una salida sintácticamente correcta en el lenguaje fuente, como el preprocesador de C , esto puede conducir a errores de compilación difíciles de depurar, [ 7 ] [ 8 ] [ 9 ] lo que a veces se denomina "#ifdef hell". [ 10 ] [ 11 ]
Referencias
- ↑ "Compilación condicional" . Microsoft Corporation. Archivado del original el 6 de septiembre de 2008. Consultado el 27 de noviembre de 2011 .
- ↑ "Directivas del preprocesador - Referencia de C#" . learn.microsoft.com . Consultado el 31 de mayo de 2025 .
- ↑ "Compilación condicional - La referencia de Rust" . doc.rust-lang.org . Consultado el 31 de mayo de 2025 .
- ↑ Gazzillo, Paul; Wei, Shiyi (27 de mayo de 2019). "¡La compilación condicional ha muerto, viva la compilación condicional!" (PDF) . ICSE-NIER '19: Actas de la 41.ª Conferencia Internacional sobre Ingeniería de Software: Nuevas Ideas y Resultados Emergentes . 2019 IEEE/ACM 41.ª Conferencia Internacional sobre Ingeniería de Software: Nuevas Ideas y Resultados Emergentes (ICSE-NIER) . Montreal, QC, Canadá: IEEE Press. págs. 105–108 . doi : 10.1109/ICSE-NIER.2019.00035 . ISBN 978-1-7281-1758-4. Archivado (PDF) del original el 07-11-2022 . Recuperado el 21-01-2023 .
- ↑ Meinicke, Jens; Thüm, Thomas; Schröter, Reimar; Benduhn, Fabián; Leich, Thomas; Saake, Gunter (2017). Meinicke, Jens; Thüm, Thomas; Schröter, Reimar; Benduhn, Fabián (eds.). Garantía de calidad para la compilación condicional . Cham: Editorial Internacional Springer. págs. 131-139 . doi : 10.1007/978-3-319-61443-4_12 . ISBN 978-3-319-61443-4. Consultado el 21 de enero de 2023 .
{{cite book}}:|work=ignorado ( ayuda ) - ↑ "compilador: ¿Cómo afecta la compilación condicional a la calidad del producto, la seguridad y la complejidad del código?" . Software Engineering Stack Exchange . Consultado el 21/01/2023 .
- ↑ Le, Duc; Walkingshaw, Eric; Erwig, Martin (18 de septiembre de 2011). "#ifdef confirmado como dañino: Promoviendo la variación comprensible del software". Simposio IEEE de 2011 sobre lenguajes visuales y computación centrada en el ser humano (VL/HCC) . págs. 143–150 . doi : 10.1109/VLHCC.2011.6070391 . ISBN 978-1-4577-1246-3.
- ↑ "Compilación condicional: ¿Por qué se debe evitar #ifdef en archivos .c?" . Stack Overflow . Consultado el 21/01/2023 .
- ↑ "c++ - Qué hacer y qué no hacer en la compilación condicional" . Stack Overflow . Consultado el 21 de enero de 2023 .
- ↑ Preschern, Christopher (2019-07-03). «Patrones para escapar del infierno de #ifdef». Actas de la 24.ª Conferencia Europea sobre Lenguajes de Patrones de Programas (PDF) . Nueva York, NY, EE. UU.: Association for Computing Machinery. págs. 1–12 . doi : 10.1145/3361149.3361151 . ISBN 978-1-4503-6206-1Archivado (PDF) del original el 21/12/2022 .
- ↑ "Viviendo en el infierno de #ifdef" . www.cqse.eu. 28 de octubre de 2015. Archivado del original el 28 de noviembre de 2022. Consultado el 21 de enero de 2023 .
- Implementación del lenguaje de programación