Ада-95. Компилятор GNAT


         

Условная компиляция с помощью препроцессора gnatprep


Хотя разработчики Ады решили не включать в язык директивы поддержки препроцессора, подобные используемым в языке программирования C, GNAT предусматривает препроцессор gnatprep, который позволяет осуществлять условную компиляцию Ада-программ.

Препроцессор gnatprep (GNAT PREProcessor) принимает файл содержащий директивы условной компиляции и генерирует, в результате своей работы, файл с исходным текстом в котором удалены все инструкции, которые не соответствуют условиям указанным в директивах условной компиляции.

Следует обратить внимание на то, что директивы условной компиляции не допускают использования выражений (в отличие от препроцессора языка C).

Таким образом, в директивах условной компиляции могут использоваться только переменные, которые могут принимать значения "истина" (True) или "ложь" (False).

Предположим, что у нас есть файл prepvalues

со следующими определениями для препроцессора:

ALPHAVERSION := True BETAVERSION := False RELEASEVERSION := False TRANSLATION := English

Предположим также, что у нас есть небольшая программа, текст которой содержит директивы препроцессора gnatprep:

with Text_IO; use Text_IO;

procedure Preptest is

-- включить только ту часть кода, которая уместна для этой версии

#if ALPHAVERSION S_Version : String := "Alpha"; #elsif BETAVERSION S_Version : String := "Beta"; #elsif RELEASEVERSION S_Version : String := "Release"; #else S_Version : String := "Unknown"; #end if;

-- строковой переменной S_Translation будет присваиваться -- значение переменной препроцессора $TRANSLATION

S_Translation : String := "$TRANSLATION";

begin

Put_Line( "This is the " & S_Version & " edition" ); Put_Line( "This is the " & S_Translation & " translation" );

end Preptest;

В результате обработки показанной выше программы препроцессором gnatprep, с учетом значений указанных в файле prepvalues, будет получен следующий исходный текст программы:




Содержание  Назад  Вперед