9. Компиляция и управление компиляцией
61
9.1.6. Проверка границ диапазона (*$R-*)
При включенном состоянии генерируется код, которым обеспечивается
проверка на соблюдение границ диапазона индексов массивов, присваиваемых
значений переменных типа диапазона и передаваемых значений параметров, если
формальные параметры диапазонного типа.
При выключенном состоянии компилятор проверяет только значения констант и
константных выражений.
9.1.7. Предупредительные сообщения (*$W-*)
Предназначение директивы - выключить диагностические сообщения на время
компиляции определенного оператора. Такая необходимость возникает в случаях
некоторых отладок и специальных действий, когда программист уверен в правильности
программного текста.
Действие директивы распространяется только на один - следующий за
директивой - оператор. После его компиляции выдача сообщений включается
автоматически. В случае необходимости выключить сообщения о нескольких
последовательных операторах, рекомендуем объединить их конструкцией begin ... end
в составной оператор и записать директиву {$W-} перед ним.
Этот переключатель обычно используется при заполнении массива с данного его
элемента определенным значением при помощи стандартных процедур FILL-
CHAR/FILLWORD или при перемещении элементов одной части массива в другой
массив при помощи стандартных процедур MOVE/MOVEWORDS. Например, пусть s
определено так - var s: string и хотим записать 5 пробелов на места символов с третьего
до девятого. Можем использовать цикл:
for i:= 3 to 3 +5 -1 do s[i]:= ' ';
Но обычно используется стандартная процедура FILLCHAR, потому что она
работает быстрее и занимает меньше памяти:
fillchar(s[3], 5, ' ');
Компилятор выдаст предупредительное сообшение, потому что размер одного
элемента - один байт, а заказано заполнение 5 байтов. В таком случае директива {$W+}
должна предшествовать оператору активизации процедуры FILLCHAR;
9.1.8. Условная компиляция специального вида (*$Y+*)
Инструкция включена специально для решения некоторых проблем
переносимости программ между разными Pascal-компиляторами путем реализации
особого вида условной компиляции. Поясним идею на примерах.
Допустим, что в исходном тексте существует фрагмент
(*) writeln; (*)
Если выполнена директива Y-, то для компилятора фрагмент представляет собою
комментарий ") writeln (". Если выполнена директива Y+, то фрагмент воспринимается
как оператор writeln между двумя комментариями. Таким образом получаем
возможность осуществить условную компиляцию типа:
{$ifOpt Y+} .... {$endif}
Рассмотрим фрагмент
(*) writeln; {*) readln; {*}
<<  <  GO  >  >>

Вернуться к началу сайта