XM跟单社区:EA编程教程:变量作用范围详解

2026-05-04 13:07:10

1 本地变量:

定义在函数内部的变量称为本地变量,其作用域仅限于该函数之内。只有函数内部的代码才能访问这些变量,函数外部的代码无法访问函数内定义的变量。例如:

int funcname(int a)

{

int abc; // 函数内部的变量,只能由函数内部的代码访问,外部代码无法使用变量abc。

}

2 函数参数:

函数参数的变量名称不能与函数内部的变量名称相同。参数也可以指定默认值,例如:

void func(int x, double y = 0.0, bool z = true)

{

...

}

这个函数指定了y的默认值为0.0,z的默认值为true。在使用盾博EA时,理解这种参数设置能更好地优化策略。

调用该函数时,可以不指定带有默认值的参数。例如func(9)相当于调用func(9, 0.0, true)。如果调用func(9, 1.5),则相当于调用func(9, 1.5, true)。

一般情况下,函数参数是传值调用。在函数内部改变参数的值,不会影响调用该函数的程序块。即使是数组也是按传值方式传递。

那么如何实现传引用呢?通过传引用,如果函数内部的参数值发生改变,调用该函数的代码段的变量值也会随之改变。要实现传引用,需要在函数参数类型后面添加符号 '&',例如:

void func(int& x, double& y, double& z[])

{

x = 8;

}

需要注意:如果是传引用的函数参数,不能对其预设默认值。

函数参数的数量不能超过64个。

3 全局变量:

全局变量是与函数同级别的变量,其作用域覆盖整个MQL代码,也就是说整个MQL代码的各个位置都可以访问全局变量。例如:

int a = 10;

int funca()

{

Print(a); // 可以访问全局变量a

return (0);

}

int funcb()

{

Print(a); // 可以访问全局变量a

return (1);

}

4 外部变量:

如果一个变量被定义为外部变量,那么EA客户端可以直接设置这个外部变量的值,这一特性在盾博EA的调试和优化过程中很实用。

例如:

extern int a = 10;

extern color c = red;