15. Директивы компилятора

Директивы влияют на процесс компиляции. Директива заключается в фигурные скобки и начинается со знака $. Движок поддерживает несколько директив: $I ($INCLUDE), $DEFINE, $UNDEF, $IFDEF, $IFNDEF, $ELSE, $ENDIF.

Директива $I: включение кода модуля

Наиболее часто используемая директива, которая включает в текущий модуль код другого модуля. {$I MyUtils}

{$I Мой Модуль}procedure Form_Create;
begin
end;

В результате включения модулей исходные коды объединяются, и получается один большой модуль. Из этого следует, что в модулях не должны дублироваться имена идентификаторов (переменных, констант, подпрограмм и т. д.).

Условная компиляция

Остальные директивы позволяют компилировать разные участки кода в зависимости от условия. Таким условием является проверка – определен ли символ условной компиляции или нет. Символ условной компиляции задается директивой $DEFINE:

{$DEFINE ABC}
{$DEFINE Проверка}
{$DEFINE 12A}

Символ условной компиляции может состоять почти из любых символов. Проверка осуществляется директивами $IFDEF, $IFNDEF:

{$IFDEF ABC}
// Код А
{$ELSE}
// Код Б
{$ENDIF}{$IFNDEF 12A}
// Код В
{$NDIF}

Код А будет скомпилирован только в том случае, если определен символ ABC, в противном случае будет скомпилирован код Б. Код В будет скомпилирован, если символ 12A не определен.

Директива $UNDEF снимает определение символа, т. е. символ становится неопределенным. В DataExpress есть два предопределенных символа – WINDOWS и LINUX. Таким образом, можно компилировать специфические для каждой из систем участки кода.

{$IFDEF LINUX}
// Специфичный для Linux код
{$ELSE}
// Специфичный для Windows код
{$ENDIF}