预处理程序
预处理程序
预处理程序是一个特殊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宏中使用合并操作符将两个宏令牌合并为一个。在宏定义中令牌合并操作符既不能是第一个也不能是最后一个。