Preprocesador

El preprocesador es un subsistema especial del compilador MQL5 que se ocupa de la preparación preliminar del código fuente del programa directamente antes de su compilación.

El preprocesador permite mejorar la legibilidad del código fuente. Se puede conseguir la estructurización del código mediante la inclusión de ciertos archivos con los códigos fuentes de los programas mql5. Además de eso, la posibilidad de asignar los nombres mnemotécnicos a algunas constantes también contribuye a la mejora de legibilidad del código.

El preprocesador, asimismo, permite determinar los parámetros especiales de los programas mql5:

El compilador usa las directivas del preprocesador para procesar de manera preliminar el código fuente antes de proceder a su compilación. La directiva comienza siempre con el símbolo # (almohadilla), por este motivo, el compilador prohíbe utilizar este símbolo en los nombres de las variables, funciones, etcétera.

Cada directiva se describe con una entrada aparte y es válida hasta el salto de línea. No es posible usar varias directivas en una sola entrada. Si la entrada de la directiva es demasiado grande, podremos dividirla en varias líneas con la ayuda de la barra invertida '\', en este caso, la línea siguiente se considerará una continuación de la entrada de la directiva.

//+------------------------------------------------------------------+
//|  pseudooperador foreach                                         |
//+------------------------------------------------------------------+
#define ForEach(index, array) for (int index = 0,                    \
   max_##index=ArraySize((array));                                   \
   index<max_##index; index++)    
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   string array[]={"12","23","34","45"};
//--- rastreamos la matriz con la ayuda de ForEach
   ForEach(i,array)
     {
      PrintFormat("%d: array[%d]=%s",i,i,array[i]);
     }
  }
//+------------------------------------------------------------------+
/* Resultado mostrado  
   0: array[0]=12
   1: array[1]=23
   2: array[2]=34
   3: array[3]=45
*/

Para el compilador, estas tres líneas de la directiva #define tendrán el aspecto de una línea larga. En este ejemplo también se usa el símbolo de almohadilla doble ##, llamado operador de fusión. Este se utiliza en los macros #define para unir los dos tokens de un macro en uno solo. El operador de fusión de tokens no puede ser el primero ni el último en la definición del macro.