- Inclusión de archivos fuente (#include)
- Visión general de las directivas de sustitución de macros
- Forma simple de #define
- Forma de #define como pseudofunción
- Operadores especiales '#' y '##' dentro de definiciones #define
- Anulación de la sustitución de macros (#undef)
- Constantes predefinidas del preprocesador
- Compilación condicional (#ifdef/#ifndef/#else/#endif)
- Propiedades generales del programa (#property)
Preprocesador
Hasta este momento hemos estado estudiando la programación MQL5, asumiendo que los códigos fuente son procesados por el compilador, que convierte su representación textual en binaria (ejecutable por el terminal). Sin embargo, la primera herramienta que lee y, si es necesario, convierte los códigos fuente es el preprocesador. Esta utilidad integrada en MetaEditor se controla mediante directivas especiales insertadas directamente en el código fuente y puede resolver una serie de problemas a los que se enfrentan los programadores a la hora de preparar códigos fuente.
Al igual que el preprocesador C++, MQL5 admite la definición de sustituciones de macros (#define), la compilación condicional (#ifdef) y la inclusión de otros archivos fuente (#include). En este capítulo exploraremos estas posibilidades. Algunas de ellas tienen limitaciones en comparación con C++.
Además de las directivas estándar, el preprocesador de MQL5 tiene sus propias directivas específicas; en concreto, un conjunto de propiedades de programas MQL (#property) e importación de funciones desde EX5 y DLL independientes (#import). Las abordaremos en las partes quinta, sexta y séptima cuando estudiemos diversos tipos de programas MQL.
Todas las directivas de preprocesador comienzan con el signo de almohadilla '#' seguido de una palabra clave y parámetros adicionales, cuya sintaxis depende del tipo de directiva.
Se recomienda iniciar una directiva de preprocesador desde el principio mismo de la línea, o al menos tras una sangría con espacio en blanco (si las directivas están anidadas). Insertar una directiva dentro de las sentencias del código fuente se considera un mal estilo de programación (a diferencia de MQL5, el preprocesador de C++ no lo permite en absoluto).
Las directivas de preprocesador no son sentencias del lenguaje y no deben terminar con un ';'. Las directivas suelen continuar hasta el final de la línea actual. En algunos casos, pueden ampliarse de forma especial para las líneas siguientes, que se abordarán por separado.
Las directivas se ejecutan secuencialmente, en el mismo orden en que aparecen en el texto y teniendo en cuenta el procesamiento de las directivas anteriores. Por ejemplo, si otro archivo está conectado a un archivo mediante la directiva #include y se define una regla de sustitución en el archivo incluido mediante #define, entonces esta regla empieza a funcionar para todas las líneas de código posteriores, incluidos los archivos de encabezado que se incluyen más tarde.
El preprocesador no procesa los comentarios.