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}