参数和自变量
通过调用传递给函数的自变量,是相应函数参数的初始值。自变量的个数、次序和类型必须与函数原型相匹配。但是,自变量计算的顺序没有定义(参见 基本概念 一节)。根据源代码的具体情况和优化考虑,编译器可能会选择一个对它来说较方便的方法。例如,对于一个包含两个自变量的列表,编译器可能会先计算第二个自变量,然后再计算第一个。只能保证在调用之前会完成对两个自变量的计算。
如有必要,每个自变量都以与 变量初始化相同的方式,使用 隐式强制转换, 映射到相应的参数。在函数启动之前,保证所有参数都有指定值。例如,根据传递的自变量,调用 Fibo 函数可能会导致以下结果(在注释中说明):
// warnings
|
所有警告都与编译器执行的隐式转换有关,因为值类型与参数类型不匹配。应将其视为潜在的错误并消除。当自变量过少或过多时,会出现错误“参数数量不正确”。
理论上,函数参数不必有名称,即,类型本身就足以描述参数。这听起来很奇怪,因为如果函数内部没有名字,我们将无法访问参数。不过在创建基于一些标准接口的程序时,有时不得不编写一些与给定原型相对应的函数。在这种情况下,函数内部的一些参数就没有必要了。为了明确指出这一事实,程序员可以省略这类参数的名字。例如,MQL5 API 需要使用以下原型实现 OnDeinit 事件处理程序函数:
void OnDeinit(const int reason); |
如果我们不需要函数代码中的 reason 参数,则可以在说明中省略它:
void OnDeinit(const int); |
终端事件处理函数通常由终端自己调用,但是如果我们需要从代码中调用类似的函数(带有匿名参数),则需要传递所有自变量,无论参数是否被命名。