Забывание о параметрах var в процедурах и функциях
Иногда в пылу программирования легко забыть, что, если про-
цедура или функция изменяет свои аргументы, они должны быть опре-
делены, как параметры типа var. Забывание этого может вызвать
причудливые результаты и потребовать часов на отладку. Например,
обсудим неправильную программу:
program Error;{ данная программа не верна }
var
t: integer;
procedure F1(x: integer);
begin
Write('Введите значение: ');
ReadLn(x);
end;
begin
F1(t); {получить значение t}
writeLn('t имеет значение: ', t);
end.
Данная программа не работает, так как значение назначается
только локальной переменной х, а затем F1 возвращает управление и
t не модифицируется. Чтобы сделать эту программу работающей, вы
должны объявить х внутри F1, как параметр var. Это будет озна-
чать, что переменная t будет модифицирована. Правильная программа
выглядит следующим образом:
program Fixed; {данная программа верна}
var
t: integer;
procedure F1(var x: integer);
begin
Write('Введите значение: ');
ReadLn(x);
end;
begin
F1(t); {получить значение t}
writeLn('t имеет значение: ', t);
end.
Хотя эту простую программу легко исправить, когда такая
ошибка произойдет в большой программе, она может оказаться одной
из наиболее трудных для нахождения.