简单语句(表达式)
简单语句包含 表达式,比如为变量赋予新值或计算结果,以及函数调用。
从形式上看,语法如下所示:
expression ; |
结尾的分号在这里很重要。因为 MQL5 源代码支持自由格式,所以 ; 是唯一的分隔符,它告诉编译器上一条语句的结束位置和下一条语句的开始位置。语句通常是按行编写,例如,像这样:
int i = 0, j = 1, k; // declaration statement
|
然而,规则上并不禁止用速记代码编写:
int i=0,j=1;++i;j+=i;k=(i+1)*(j+1);Print(i," ",j); |
如果没有 ;,相邻表达式会悄悄地“粘在一起”并导致意想不到的结果。例如,表达式 x = y - 10 * z 很可能成为两个表达式: x = y; 和 -10 * z;(-10 带有一元减号)。怎么会出现这种情况?
这是因为在语法上允许编写“无实际效果”的语句,即不保存结果。以下是另一个例子:
i + j; // warning: expression has no effect |
编译器发出“表达式无效”警告。允许构建这种表达式是有必要的,因为某些对象类型(我们将在 第三章中学习)允许 运算符重载。即我们可以用一些特定的操作来代替运算符符号的常用含义。如果 i 和 j 的类型不是 int,而是重写了某个加法运算的类,这样的表示法会生效,编译器不会发出警告。
复合语句内部只支持编写简单语句。例如,在函数外部调用 Print 函数会无效:
Print("Hello ", Symbol());
|
我们将得到一连串的错误:
'Print' - unexpected token, probably type is missing?
|
在本例中,最后一条错误最切题:“表达式不允许在全局上下文中使用。”