返回值
函数可以返回内置类型的值,包含内置类型字段的 结构体 ,以及 指向函数的指针 和指向 类 对象的指针。类型名写在函数定义中的名称之前。如果函数不返回任何内容,则应被赋予 void 类型。
若要从数组函数返回,必须使用通过引用传递的参数(请参见 值参数和引用参数)。
使用 return 语句返回一个值,其中在 return 关键字后指定了一个表达式。可以使用两种形式中的任何一种:
return expression ; |
或者:
return ( expression ) ; |
如果函数的类型为 void,那么 return 语句将简化为:
return ; |
return 语句不能在 void 函数内部包含任何表达式:编译器将生成一个错误“'return' - 'void' 函数返回一个值”。
对于这样的函数,理论上不需要在函数体的代码块结尾使用 return。我们在 OnStart 函数的例子中看到了这一点。
如果函数的类型不是 void,那么必须用 return 语句。如果不存在,将出现编译错误“并非所有控制路径都返回值”。
int func(void)
|
需要注意的是,一个函数体可以有多个 return 语句。特别是在根据条件而提前退出的情况下。任何 return 语句都会在其所在的位置中断函数的执行。
如果函数必须返回一个值(因为它不是 void 类型函数),并且没有在 return 运算符中指定,编译器将生成错误“函数必须返回一个值”。下面给出了 func 函数的编译器更正版本 (FuncReturn.mq5)。
int func(void)
|
如果返回值与指定的函数类型不一致,编译器将尝试进行 隐式转换。如果类型需要显式转换,将会生成错误。
为了返回值,会隐式创建一个临时变量,并提供给调用代码使用。
在我们学习了对象类型(参见 类一章)和从函数返回对象指针的功能后,我们将回头分析如何安全地传递对象指针。与 C++ 不同,MQL5 中的函数不能返回引用。试图在结果类型中声明带有 & 符号的函数会导致错误“不能使用 & 引用”。