Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BorlandPascal.doc
Скачиваний:
54
Добавлен:
17.03.2015
Размер:
2.83 Mб
Скачать

Глава 5. Переменные и типизированные константы Описания переменных

Описание переменной представляет собой список идентификато-

ров, которые обозначают новые переменные и их типы.

описание ------------- ---- ---- ----

переменной ->¦список иден-+->¦ : +->¦тип+-T-----------T->¦ ; +>

¦тификаторов ¦ L---- L---- ¦ ¦ L----

L------------- ¦ ---------¦

L>¦absolute+-

L---------

Тип, задаваемый для переменных, может быть идентификатором

типа, который был ранее описан в разделе описания типов того же

самого блока, или блока, в который входит данный блок, или моду-

ля, или же этот тип может быть новым определением типа.

При указании идентификатора в списке идентификаторов описа-

ния переменной этот идентификатор имеет силу идентификатора пере-

менной в том блоке, где это описание было указано. К этой пере-

менной можно обращаться из любого места этого блока, если ее

идентификатор не переопределен в блоке, входящем в первый. Пере-

определение означает, что для новой переменной используется тот

же самый идентификатор, но это использование не оказывает влияния

на значение первоначальной переменной.

Приведем пример раздела описания переменной:

var

X,Y,Z: real;

I,J,K: integer;

Digit: 0..9;

C: Color;

Done,Error: boolean;

Operator: (plus, minus, times);

Hue1,Hue2: set of Color;

Today: Date;

Results: MeasureList;

P1,P2: Person;

Matrix: array[1..10,1..10] of Real;

Переменные, описанные вне процедуры и функции, называются

глобальными переменными и располагаются в сегменте данных. Пере-

менные, описанные в самой процедуре или функции, называются ло-

кальными переменными и располагаются в сегменте стека.

Сегмент данных

Максимальный размер сегмента данных равен 65520 байт. При

компоновке программы (что автоматически осуществляется в конце

компиляции программы) глобальные переменные всех модулей, исполь-

зуемых программой, а также собственные глобальные переменные

программы, размещаются в сегменте данных.

Если для глобальных переменных требуется более 65520 байт,

то следует распределить большие структуры в виде динамических пе-

ременных. Дальнейшее описание этой темы можно найти в разделе

"Указатели и динамические переменные" настоящей главы.

Сегмент стека

Размер сегмента стека устанавливается с помощью директивы

компилятора $M и лежит в пределах от 1024 до 65520 байт. По умол-

чанию размер стека равен 16384 байт.

При каждой активизации (вызове) процедуры или функции в стек

помещается множество локальных переменных. При завершении работы

память, занимаемая локальными переменными, освобождается. В любой

момент выполнения программы общий размер локальных переменных в

активных процедурах и функциях не должен превышать размера сег-

мента стека.

Примечание: Если вы пишете приложение для Windows, то

Windows налагает на сегменты данных и стека специальные

требования, так что рабочий максимум стека и область сег-

мента данных могут быть меньше, чем упомянутые максимальные

области сегмента данных и стека.

Директива компилятора $S используется для проверок перепол-

нения стека в программе. В состоянии {$S+}, принятом по умолча-

нию, генерируется код, осуществляющий проверку переполнения стека

в начале каждой процедуры или функции. В состоянии {$S-} такие

проверки не проводятся. Переполнение стека может вызвать аварий-

ное завершение работы системы, поэтому не следует отменять про-

верки стека, если нет абсолютной уверенности в том, что перепол-

нения не произойдет.

Соседние файлы в предмете Программирование на Pascal