预处理程序

预处理程序是一个特殊MQL4的子程序,在程序执行之前预先准备的程序源代码。

预处理程序会尽可能地读取源代码。代码的结构可能包括MQL4 程序源代码的特殊文件。 对于读取的代码尽可能地按照具体常数分配储存。

预处理程序允许mql5 程序参量指定。

编译器使用预处理程序指令在编译之前对源代码进行预处理。这个指令通常以#开始,因此编译器禁止在变量,函数等名称中使用符号。

每个指令都由一个单独的条目描述,并且在换行符之前都是有效的。在一个条目中不能使用多个指令。如果指令条目太大,可以使用'\'符号将其分隔成若干行。 在这种情况下,下一行被认为是指令条目的延续。

//+------------------------------------------------------------------+
//|  foreach pseudo-操作符                                            |
//+------------------------------------------------------------------+
#define ForEach(index, array) for (int index = 0,                    \
   max_##index=ArraySize((array));                                   \
   index<max_##index; index++)    
//+------------------------------------------------------------------+
//| 脚本程序起始函数                                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
   string array[]={"12","23","34","45"};
//--- 使用ForEach绕过数组
   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
*/

对于编译器来说,所有这三个#define指令行看起来像一条很长的线。上面的示例也适用于##字符,即在 #define宏中使用合并操作符将两个宏令牌合并为一个。在宏定义中令牌合并操作符既不能是第一个也不能是最后一个。