Переменные
Переменная - это объект, значение которого может быть изменено во время выполнения. Каждая переменная объявляется под уникальным именем, которое должно быть действительным идентификатором. Это имя используется для доступа к ячейке памяти, занимаемой переменной.
Переменные объявляются в части декларации файла или подпрограммы - каждая переменная должна быть объявлена перед использованием. Глобальные переменные (те, которые не принадлежат какому-либо закрывающему блоку) объявляются ниже оператора использования, выше зарезервированного слова 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 для детализации информации.