Muchos lenguajes de programación admiten la compilación condicional. Normalmente, las directivas del compilador definen o "dejan de definir" ciertas variables ; otras directivas prueban estas variables y modifican la compilación en consecuencia. Por ejemplo, si no se utiliza un lenguaje real, el compilador puede configurarse para definir "Macintosh" y dejar de definir "PC", y el código puede contener:
(* Código genérico del sistema *) si mac ! = Null entonces (* código específico de macOS *) de lo contrario si pc ! = Null (* código específico de Windows *)
En C y algunos lenguajes con una sintaxis similar, esto se hace usando una directiva '#ifdef' .
Cuando la compilación condicional depende de demasiadas variables, puede hacer que el código sea más difícil de razonar ya que el número de posibles combinaciones de configuración aumenta exponencialmente. [2] [3] [4] Cuando la compilación condicional se realiza a través de un preprocesador que no garantiza una salida sintácticamente correcta en el lenguaje fuente, como el preprocesador C , esto puede conducir a errores de compilación difíciles de depurar, [5] [6] [7] lo que a veces se llama "el infierno de #ifdef". [8] [9]
Referencias
^ "Compilación condicional". Microsoft Corporation. Archivado desde el original el 6 de septiembre de 2008. Consultado el 27 de noviembre de 2011 .
^ 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-4Archivado (PDF) del original el 7 de noviembre de 2022. Consultado el 21 de enero de 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. ISBN978-3-319-61443-4. Recuperado 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 de enero de 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. ISBN978-1-4577-1246-3.
^ "compilación condicional: ¿por qué se debe evitar #ifdef en archivos .c?". Desbordamiento de pila . Consultado el 21 de enero de 2023 .
^ "C++ - Qué hacer y qué no hacer con la compilación condicional". Desbordamiento de pila . Consultado el 21 de enero de 2023 .
^ Preschern, Christopher (3 de julio de 2019). Patrones para escapar del infierno de #ifdef (PDF) . Actas de la 24.ª Conferencia Europea sobre Lenguajes de Patrones de Programas . EuroPLop '19. Nueva York, NY, EE. UU.: Association for Computing Machinery. págs. 1–12. doi :10.1145/3361149.3361151. ISBN978-1-4503-6206-1. Archivado (PDF) del original el 21 de diciembre de 2022.
^ "Vivir en el infierno #ifdef". www.cqse.eu . 28 de octubre de 2015. Archivado desde el original el 28 de noviembre de 2022 . Consultado el 21 de enero de 2023 .