Пустая инструкция

Пустая инструкция — самая простая инструкция языка. Она состоит всего из одного символа — точка с запятой ';'.

Пустая инструкция используется в программе в тех местах, где синтаксис требует наличия инструкции, но логика алгоритма предписывает ничего не делать.

Например, следующий цикл while используется для поиска пробела в строке. Вся суть алгоритма выполняется непосредственно в заголовке цикла, так что его тело должно быть пустым. Мы могли бы написать пустой блок из фигурных скобок, но также здесь подойдёт и пустая инструкция (StmtNull.mq5).

int i = 0;
ushort c;
string s = "Hello, " + Symbol();
while((c = s[i++]) != ' ' && c != 0); // intentional ';' (!)
if(c == ' ')
{
   Print("Space found at: "i);
}

Обратите внимание, что если точку с запятой в конце заголовка while убрать (допустим, случайно), то инструкция if станет расцениваться как тело цикла. В результате не произойдет вывода в журнал функцией Print. Фактически, программа сработает некорректно, хотя и без заметных ошибок.

Обратная ситуация также возможна: лишняя точка с запятой после заголовка цикла (там, где она не должна была быть) "отцепит" тело цикла от заголовка, то есть в цикле будет выполняться только пустая инструкция.

В связи с этим следует проверять в коде необязательные точки с запятой, и везде, где они поставлены намеренно, оставлять комментарий с пояснениями.

Между прочим, с формальной точки зрения пустая инструкция используется и в операторе for, когда мы опускаем выражение инициализации. На самом деле инициализация есть всегда:

for ([инициализация] ; [условие окончания цикла] ; [выражение конца цикла])
   тело цикла

Первый символ ';' входит в состав инструкции инициализации, которая может быть выражением или пустой инструкцией: обе содержат знак ';' на конце, причем вторая не содержит ничего кроме ';'. Таким образом и достигается опциональность (пустота).