Переменные

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

Переменные объявляются в части декларации файла или подпрограммы - каждая переменная должна быть объявлена перед использованием. Глобальные переменные (те, которые не принадлежат какому-либо закрывающему блоку) объявляются ниже оператора использования, выше зарезервированного слова begin.

Указание типа данных для каждой переменной является обязательным. Синтаксис для объявления переменной следующий:

var identifier_list : type;

Здесь, identifier_list представляет собой список действительных идентификаторов с разделителями-запятыми и type может быть произвольным типом данных.

Подробнее см. Типы и Преобразование типов. Для получения дополнительной информации об области переменных см. Главу Области видимости и Видимость.

Паскаль позволяет сократить синтаксис только с одним зарезервированным словом var с последующим объявлением нескольких переменных. Например:

var i, j, k : byte;
    counter, temp : word;
    samples : array[100] of word;

Модификатор External

Используйте модификатор externalчтобы указать, что фактическое место и начальное значение переменной, функции или тела процедуры определено в отдельном модуле исходного кода.

Например, давайте создадим проект, который будет вычислять площадь круга и будет иметь определение функций и процедур в двух разных единицах и вызов этих подпрограмм в третьем отдельном модуле.
Таким образом, проект будет состоять из модуля, Main_Unit.mpas , First_Unit.mpas и Second_Unit.mpas модулей.

В Main_Unit мы определим процедуру, названную r_squared (вычисляет квадрат радиуса окружности). Кроме того, оба модуля должны быть включены в Main_Unit :

program Main_Unit;

uses First_Unit, Second_Unit;  // Включите оба используемых модуля

function r_squared(r : real) : real;  // Определение процедуры r_squared
begin
  result := r*r;
end;

begin
  CircleArea();  // Вызов процедуры CircleArea
end.

В модуле First_Unit мы определяем и объявляем процедуру, названную pi_r_squared (вычисляет pi, умноженное на квадрат радиуса):

unit First_Unit;

procedure pi_r_squared(rr : real);  // Объявление процедуры pi_r_squared

implementation

procedure pi_r_squared(rr : real);  // Объявление процедуры pi_r_squared
var res : real;

begin
  res := rr*3.14;
end;

end.

В Second_Unit мы будем обращаться к подпрограммам, определенным извне (r_squared и pi_r_squared). Прежде всего, мы должны объявить их прототипы с последующим модификатором external. Затем мы можем перейти к вызову процедур:

unit Second_Unit;

procedure CircleArea();
function r_squared(r : real) : real; external;  // Объявление процедуры r_squared  (определена в Main_Unit) с последующим модификатором external
procedure pi_r_squared(rr : real); external;    // Объявление процедуры pi_r_squared  (определена в First_Unit) с последующим модификатором external

implementation

procedure CircleArea();  // Определение процедуры CircleArea - площадь круга
var res : real;

begin
   res := r_squared(5);   // вызов процедуры r_squared 
   pi_r_squared(res);     // вызов процедуры pi_r_squared
end;

end.

Атрибут выравнивания

Этот атрибут определяет минимальное выравнивание для поля переменной или записи, измеренное в байтах. Например, объявление:

var temp : dword; aligned 128;

заставит компилятор распределить глобальную переменную temp на 128-байтной границе.

Это также заставит компилятор распределить глобальную переменную x на 16-байтной границе.
Выравниваемый атрибут может только увеличить выравнивание, но вы можете уменьшить его, указав как упакованный (packed).

Переменные и ARM

Каждая объявленная переменная потребляет часть ОЗУ. Тип данных переменной определяет не только допустимый диапазон значений, но и пространство, которое переменная занимает в ОЗУ.Имейте в виду, что операции с использованием разных типов переменных требуют различного времени. mikroPascal PRO для ARM перерабатывает локальное пространство переменной памяти - локальные переменные, объявленные в разных функциях и процедурах, используют одно и то же пространство памяти, если это возможно.

Нет необходимости явно объявлять SFR, так как mikroPascal PRO для ARM автоматически объявляет соответствующие регистры как глобальные переменные volatile word, см. SFR для детализации информации.