Compilación condicional

Cuando un compilador produce un programa que puede cambiar en función de parámetros determinados

En programación informática , la compilación condicional es una técnica de compilación que da como resultado programas ejecutables diferentes según los parámetros especificados. Esta técnica se utiliza habitualmente cuando se necesitan estas diferencias en el programa para ejecutarlo en diferentes plataformas o con diferentes versiones de las bibliotecas o el hardware necesarios .

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' .

Un procedimiento similar, denominado " comentario condicional ", es utilizado por Microsoft Internet Explorer desde la versión 5 a la 9 para interpretar el código HTML . También existe un mecanismo propietario similar para añadir comentarios condicionales dentro de JScript , conocido como compilación condicional . [1]

Crítica

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

  1. ^ "Compilación condicional". Microsoft Corporation. Archivado desde el original el 6 de septiembre de 2008. Consultado el 27 de noviembre de 2011 .
  2. ^ 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 .
  3. ^ 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. Recuperado el 21 de enero de 2023 . {{cite book}}: |work=ignorado ( ayuda )
  4. ^ "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 .
  5. ^ 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.
  6. ^ "compilación condicional: ¿por qué se debe evitar #ifdef en archivos .c?". Desbordamiento de pila . Consultado el 21 de enero de 2023 .
  7. ^ "C++ - Qué hacer y qué no hacer con la compilación condicional". Desbordamiento de pila . Consultado el 21 de enero de 2023 .
  8. ^ 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. ISBN 978-1-4503-6206-1. Archivado (PDF) del original el 21 de diciembre de 2022.
  9. ^ "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 .
Obtenido de "https://es.wikipedia.org/w/index.php?title=Compilación_condicional&oldid=1227306388"