1.2.77. $V или $VARSTRINGCHECKS : Проверка Var-строки

Вверх  Предыдущий  Следующий

Директива {$VARSTRINGCHECKS } определяет, насколько строго компилятор будет проверять совместимость строковых типов для строк, переданных в подпрограмму по ссылке. Если эта директива в состоянии + или ON, то компилятор проверяет, является ли строка, переданная как параметр, точным соответствием типу параметра, объявленного в процедуре.

По умолчанию компилятор предполагает, что все короткие строки являются совместимыми типами. То есть, следующий код будет компилироваться:

Procedure MyProcedure(var Arg: String[10]);
  begin
    Writeln('Arg ',Arg);
  end;
Var
  S : String[12];
begin
  S:='123456789012';
  MyProcedure(S);
end.

Типы Arg и S не являются строго совместимыми: параметр Arg- это строка длиной 10 символов, а переменная S – строка длиной 12 символов. Строка S будет усечена до 10 символов.

В состоянии {$V+} этот код приведёт к ошибке компиляции:

testv.pp(14,16) Error: string types doesn't match, because of $V+ mode

(Ошибка: строковые типы несовместимы, потому что включен режим $V+)

Учтите, что это имеет эффект только для строк, передаваемых по ссылке, а НЕ по значению.