- 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)
Inclusión de archivos fuente (#include)
La directiva #include se utiliza para incluir el contenido de otro archivo en el código fuente. Esta directiva produce la misma acción que si el programador copiara el texto del archivo de inclusión en el portapapeles y lo pegara en el archivo actual en el lugar donde se utiliza la directiva.
Dividir el código fuente en varios archivos es una práctica habitual cuando se escriben programas complejos. Estos programas se construyen de forma modular, de modo que cada módulo o archivo contiene código relacionado lógicamente que resuelve una o varias tareas relacionadas.
Los archivos de inclusión también se utilizan para distribuir bibliotecas (conjuntos de algoritmos ya creados). La misma biblioteca puede incluirse en distintos programas. En este caso, la actualización de la biblioteca (la actualización de su archivo de encabezado) se aplicará automáticamente en todos los programas durante su próxima compilación.
Si los archivos principales de los programas MQL deben tener la extensión mq5, los archivos de inclusión suelen tener la extensión mqh (la 'h' al final de la palabra significa «header», es decir, «encabezado» en inglés). Al mismo tiempo, está permitido utilizar la directiva #include para otros tipos de archivos de texto, como por ejemplo, *.txt (véase más adelante). En cualquier caso, cuando se incluye un archivo, el programa final combinado del archivo principal mq5 y todos los encabezados deben seguir siendo sintácticamente correctos. Por ejemplo, incluir un archivo con información binaria (como una imagen png) romperá la compilación.
Existen dos tipos de declaraciones #include :
#include <file_name>
|
En la primera, el nombre del archivo va entre corchetes angulares. El compilador busca estos archivos en el directorio de datos del terminal en la subcarpeta MQL5/Include/.
Para la segunda, con el nombre entre comillas, la búsqueda se realiza en el mismo directorio que contiene el archivo actual que utiliza la sentencia #include.
En ambos casos, el archivo puede ubicarse en subcarpetas dentro del directorio de búsqueda. En este caso, debe especificar toda la jerarquía relativa de carpetas antes del nombre de archivo en la directiva. Por ejemplo, además de MetaTrader 5, hay muchos archivos de arranque de uso común, entre los que se encuentra DateTime.mqh con un conjunto de métodos para trabajar con la fecha y la hora (están diseñados como estructuras, que son las construcciones del lenguaje que abordaremos en la Parte 3 dedicada a la POO). El archivo DateTime.mqh se encuentra en la carpeta Tools . Para incluirlo en su código fuente, debe utilizar la siguiente directiva:
#include <Tools/DateTime.mqh> |
Para demostrar cómo incluir un archivo de encabezado de la misma carpeta que el archivo fuente con la directiva vamos a analizar el archivo Preprocessor.mq5. Contiene la siguiente directiva:
#include "Preprocessor.mqh" |
Hace referencia al archivo Preprocessor.mqh, que en realidad se encuentra junto a Preprocessor.mq5.
Un archivo de inclusión puede, a su vez, incluir otros archivos. En concreto, dentro de Preprocessor.mqh está el siguiente código:
double array[] =
|
Significa que el contenido del array se inicializa a partir del archivo de texto dado. Si miramos dentro de Preprocessor.txt veremos el texto que cumple con las reglas de sintaxis de inicialización de arrays:
1, 2, 3, 4, 5 |
Así, es posible recopilar el código fuente de los componentes personalizados, incluso generarlo utilizando otros programas.
Tenga en cuenta que si el archivo especificado en la directiva no se encuentra, la compilación fallará.
El orden en el que se incluyen varios archivos determina el orden en el que se procesan las directivas del preprocesador que contienen.