函数定义
函数定义包括返回的值类型、标识符、参数列表(用圆括号括起)和主体,主体是指包含语句的代码块。列表中的各参数用逗号分隔。每个参数都被赋予一个类型、一个名称和一个默认值(可选)。
result_type function_identifier ( [parameter_type parameter_identifier
|
允许创建不带参数的函数:那么就没有列表,并且函数名后面带空括号(不能省略括号)。或者也可以在括号中间写入 void 关键字,以强调没有参数。例如,像这样:
void OnStart(void)
|
列表中参数的返回类型、数量和类型的组合称为函数原型或签名。不同的函数可以有相同的原型。
在前面的章节中,我们已经看到了 OnStart 和 Greeting 之类的函数定义。现在让我们尝试将计算斐波那契数作为一个测试函数。斐波那契数的计算公式如下:
f[0] = 1
|
第一和第二个数字是 1,后面所有数字都是其前两个数字之和。我们给出数字串的开头:1, 1, 2, 3, 5, 8, 13, 21, 34, 55...
可以使用以下函数 (FuncFibo.mq5) 计算给定索引所指的字数。
int Fibo(const int n)
|
取一个 int 类型的参数 n 并返回一个 int 类型的结果。n 参数有 const 修饰符,因为我们不打算在函数内部改变 n(这种对变量“权限”约束的显式声明值得提倡,因为有助于避免随机错误)。
局部变量 prev 和 result 将存储序列中最后两个数字的当前值。在对 i 的循环过程中,我们计算它们的和,获取序列的下一个数。此前,旧值 result 被写入变量 temp,因此在求和后,它被传递到 prev。
执行给定次数的循环后,result 变量包含预期数字。我们使用 result 语句从函数中返回这个数。
函数的输入参数也是一个局部变量,它将在函数调用期间被初始化为实际值。通过函数调用,该值从语句“外部”传递。
参数名必须是唯一的,并且不能与局部变量名相同。
函数体是一个代码块,定义了 局部变量的作用域和生存期。它们的定义和操作原理将在 声明/定义语句 和 初始化章节中介绍。