Präprozessor

Präprozessor ist ein spezielles Subsystem des MQL5 Compilers, das den Text einer Quelldatei unmittelbar vor dem Kompilieren des Programms aufbereitet.

Der Präprozessor ermöglicht es, die Lesbarkeit des Quellcodes zu verbessern. Der Codes kann strukturiert werden, indem spezielle Dateien mit Quellcodes von mql5-Programmen miteinbezogen werden. Die Möglichkeit, bestimmten Konstanten mnemonische Namen zuzuweisen, trägt zur Lesbarkeit des Codes bei.  

Darüber hinaus erlaubt es der Präprozessor, spezifische Parameter von mql5-Programmen festzulegen:

Der Compiler verwendet Direktiven des Präprozessors für eine vorbereitende Verarbeitung eines Quellcodes vor der Kompilierung. Die Direktive beginnt immer mit dem Zeichen # (Doppelkreuz), deswegen verbietet der Compiler, dieses Zeichen in den Namen von Variablen, Funktionen usw. zu verwenden.

Jede Direktive wird in einem separaten Eintrag beschrieben und ist bis zum Zeilenumbruch gültig. In einem Eintrag können Sie nur eine Direktive verwenden. Wenn der Eintrag der Direktive zu groß ist, kann er mithilfe des Zeichens '\' in mehrere Zeilen aufgeteilt werden. In diesem Fall gilt die nächste Zeile als eine Fortsetzung des Eintrags dieser Direktive.

//+------------------------------------------------------------------+
//|  Pseudo-Operator 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"};
//--- Iteration durch das Array mithilfe von ForEach
   ForEach(i,array)
    { 
      PrintFormat("%d: array[%d]=%s",i,i,array[i]);
     }
  }
//+------------------------------------------------------------------+
/* Das Ergebnis  
   0: array[0]=12
   1: array[1]=23
   2: array[2]=34
   3: array[3]=45
*/

Für den Compiler sehen alle drei Zeilen der Direktive #define als eine lange Zeile aus. In diesem Beispiel wird auch das Zeichen ## verwendet, das als Merge-Operator bezeichnet wird und für das Zusammenführen von zwei Tokens zu einem in den #define Makros verwendet wird. Der Merge-Operator kann nicht der erste oder der letzte in der Definition eines Makros sein.