Önişlemci

Önişlemci, MQL5 derleyicisinin özel bir alt sistemidir. Kaynak kodunun program derlenmeden önce hızlı bir şekilde hazırlanması için tasarlanmıştır.

Kaynak kodunun okunabilirliğini artırır. Uygulamalar, MQL5 programlarının kaynak kodlarını taşıyan belirli dosyaları içerecek şekilde yapılandırılabilir. Belirli sabitlere anımsatıcı isimler verilmesi okunabilirliğin artırılmasına yardımcı olur.

Önişlemci MQL5 programlarının özel parametrelerinin belirlenmesini de sağlar:

Önişlemci yönergeleri derleyici tarafından derlenmeden önce kaynak kodunu ön işleme koymak için kullanılır. Yönerge her zaman # ile başlar, bu nedenle derleyici değişkenlerin, fonksiyonların vb. simlerinde sembol kullanımını yasaklar.

Her direktif ayrı bir girdi ile tanımlanır ve satır sonuna kadar geçerlidir. Bir girişte birkaç yönergeyi kullanamazsınız. Yönerge girişi çok büyükse, '\' simgesini kullanarak birkaç satıra bölünebilir. Bu durumda, bir sonraki satır direktif girişinin bir devamı olarak kabul edilir.

//+------------------------------------------------------------------+
//|  foreach sözde-operatorü                                         |
//+------------------------------------------------------------------+
#define ForEach(index, array) for (int index = 0,                    \
   max_##index=ArraySize((array));                                   \
   index<max_##index; index++)    
//+------------------------------------------------------------------+
//| Script programı başlatma fonksiyonu                              |
//+------------------------------------------------------------------+
void OnStart()
  {
   string array[]={"12","23","34","45"};
//--- ForEach kullanarak diziyi atlamak 
   ForEach(i,array)
     {
      PrintFormat("%d: array[%d]=%s",i,i,array[i]);
     }
  }
//+------------------------------------------------------------------+
/* Output result  
   0: array[0]=12
   1: array[1]=23
   2: array[2]=34
   3: array[3]=45
*/

Derleyici için, bu üç #define yönergesi satırı tek bir uzun satır gibi görünür. Yukarıdaki örnek, #define makrolarında kullanılan bir birleştirme operatörü olan ## karakteri de iki makro belirteçlerini birleştirmek için de geçerlidir. İşaretçiler birleştirme işleci, bir makro tanımında ilk veya son olamaz.