9. Компилация и управление на компилацията
59
В такива случаи се използва условна компилация. За програмистите, работили на
асемблер, това не е нищо ново и те трябва само да научат синтаксиса. При някои
реализации на Pascal тя също е реализирана, но в ISO стандарта условна компилация не
съществува. Условната компилация в UniPascal е не само силно повлияна от тази в
разпространената версия на Turbo Pascal 4.0+ за 16 битовите компютри IBM PC, но нещо
повече - тя е същата. Така че програмисти, работили на Turbo Pascal, могат да прескочат
това описание.
9.3.1. Директиви DEFINE и UNDEF
Дефинирането на идентификатори за условна компилация става чрез директивата
{$define xxx}, където xxx е идентификатор за условната компилация. Този
идентификатор няма нищо общо с нито една част от вашата програма, нищо не ви пречи
да имате променлива, процедура, тип и т.н. със същото име. Двата идентификатора
няма да имат нищо общо помежду си. При идентификаторите за условна компилация
важното е само дали те са дефинирани или не. Единственото ограничение е: общата
дължина на едновременно дефинираните идентификатори за условна компилация може
да бъде най-много 70 букви.
Може да премахнете дефиницията на даден символ за условна компилация чрез
аналогичната директива {$UnDef xxx}. Тази директива премахва дефинирането на
идентификатор за условна компилация, т.е. по този начин се забравя за съществуването
на такъв идентификатор за условна компилация.
В UniPascal е дефиниран по премълчаване идентификатора UniPas.
9.3.2. Директиви IFDEF, IFNDEF, IFOPT, ELSE и ENDIF
Основната идея на условната компилация е да се укаже на компилатора, че ако
е изпълнено някакво условие, той трябва да компилира дадена част от текста на
програмата, в противен случай - друга част (или, в частност, нищо).
 Общият вид на условната компилация е:
{$IFxxx condition}
{ 
текст, който да се компилира, ако условието се удовлетворява 
}
{$ENDIF}
или
{$IFxxx condition}
{
 текст, който се компилира, ако условието се удовлетворява 
}
{$ELSE}
{ 
текст, който се компилира, ако условието не се удовлетворява
 }
{$ENDIF}
където IFxxx е IFDEF, IFNDEF или IFOPT, а condition е проверяваното условие.
При реализираната в UniPascal условна компилация проверяваното условие зависи
от използваната директива IFxxx по следния начин:
*
при използване на директивата IFDEF условието се удовлетворява, ако
даденият параметър е идентификатор за условна компилация, който  е
дефиниран;
*
при използване на директивата IFNDEF условието се удовлетворява, ако
даденият параметър е идентификатор за условна компилация, който не е
дефиниран;
*
при използването на директивата IFOPT условието трябва да бъде от вида
X+ или X-, където X е буква на някоя от превключваемите директиви. В
<<  <  GO  >  >>

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