7.1.2. Объявление внешних переменных

На верх  Назад  Вперёд

Некоторые библиотеки или блоки кода имею экспортируемые переменные. Вы можете получить доступ к этим переменным также, как и к внешним функциям. Для доступа к внешней переменной вы объявляете её следующим образом:

Var
  MyVar : MyType; external name 'varname';

Это имеет двойной эффект:

1.Не требуется память для размещения этой переменной

2.Имя переменной используется в ассемблерном коде как varname. Это имя чувствительно к регистру, вы должны это учитывать.

Переменная будет доступна по объявленному имени, в нашем случае это MyVar с учётом регистра.

Возможен другой вариант объявления:

Var
  varname : MyType; cvar; external;

Это объявление также имеет двойной эффект:

Модификатор external гарантирует, что не выделяется место для этой переменной.

Модификатор cvar указывает компилятору, что имя переменной, используемой в ассемблерном коде, является точно таким, как указано в объявлении. Это имя чувствительно к регистру, вы должны это учитывать.

Первый вариант позволяет изменить имя внешней переменной для внутреннего использования. В качестве примера рассмотрим следующий С-файл extvar.c ):

/* Объявить переменную, выделить место для хранения */
int extvar = 12;

и следующую программу extdemo.pp ):

Program ExtDemo;
 
{$L extvar.o}
 
Var { Чувствительное к регистру объявление!!! }
  extvar : longint;
  cvar; external;
  I : longint; external name 'extvar';
 
begin
{ Extvar можно использовать с именем, не чувствительным к регистру!!! }
  Writeln('Переменная ''extvar'' имеет значение: ', ExtVar);
  Writeln('Переменная ''I'' имеет значение: ', i);
end.

Компиляция C-файла и программы на Pascal:

gcc -c -o extvar.o extvar.c

ppc386 -Sv extdemo

создаст программу, которая печатает

Переменная 'extvar' имеет значение: 12

Переменная 'I'      имеет значение: 12

на экране.