9. Компилация и управление на компилацията
57
стряскащо предупредително съобщение, ако наистина искате да направите това, което
правите. От друга страна е нежелателно да се остави на програмиста включването му,
защото той или ще забрави (или ще го домързи), а няма да са малко и тези, които ще
започват всяка програма с {$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, ' ');
При това използване компилаторът ще даде предупредително съобщение,
защото големината на един елемент е 1 байт, а е зададено запълване на 5 байта. В такъв
случай трябва да поставим {$W+} пред FILLCHAR.
9.1.8. Специален вид условна компилация (*$Y+*)
Този ключ разрешава (+) или забранява (-) възприемането на
последователността '(*)' като цялостен коментар. Съществуването на тази наглед
безсмислена възможност дава един елементарен вид условна компилация, който ни
измъква от някои иначе непреодолими препятствия при преносимостта между UniPascal
и някоя друга реализация на Pascal. Ще разгледаме действието й чрез примери. Нека
имаме:
(*) writeln; (*)
Тогава, ако ключът Y е изключен, написаното е коментар със следния текст
') writeln; (', но ако е включен, това са два коментара и между тях е writeln. По този
начин получаваме условна компилация от вида {$ifOpt Y+} ... {$endif} (виж "Условна
компилация"). А ако имаме
(*) writeln; {*) readln; {*}
то при изключен ключ Y това ще представлява коментара - ') writeln; {', последван от readln;,
последван от коментар - звездичка (звездичката в коментара няма функционално
предназначение и може да се постави произволен коментар). При включен ключ
разглежданият пример представлява специалния вид коментар (*), последван от writeln;,
последван от коментар, който съдържа '*) readln; {*'. Така получихме аналог на условната
компилация {$ifOpt Y+} ... {$else} ... {$endif}.
При използването на този вид условна компилация трябва да се внимава с
използването на коментар, заграден от (*), {*) и {*}. Основно правило е, че в първата
част от условната компилация (тази заградена в (*) и {*) или в (*) и (*)) може да се
използват коментари само във фигурни скоби '{ }'. А във втората част (заградена от {*)
и {*}), коментарът може да бъде ограден само с коментарните скоби (* и *). Все пак
по-добре е да не се използва коментари (не изобщо, а само в условната компилация от
този вид), ако има макар и малка неяснота в принципа на работа на условната
компилация.
<<  <  GO  >  >>

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