Информатика и технология программирования


Классы памяти и области действия переменных - часть 2


Автоматическая переменная, в определении которой присутствует служебное слово register, становится РЕГИСТРОВОЙ: транслятор по возможности стремится хранить ее в регистрах процессора, что увеличивает быстродействие выполняемых над ней операций:


{ register char *p; // С памятью нужно работать ...


*p++; // эффективно

l Внешние переменные. Создаются транслятором и имеют областью действия все модули программы. Размещаются транслятором в объектном модуле, а затем компоновщиком в программном файле (сегменте данных) и инициализируются там же. Термин "внешние" характеризует доступность этих переменных из других модулей, или область действия. В Паскале такие переменные называются глобальными (общепринятый термин).

Синтаксис определения: любая переменная, определенная вне тела функции, по умолчанию является внешней.

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

.


Файл a.c Файл b.c

.


определение переменной объявление переменной
int a,B[20]={1,5,4,7}; extern int a,B[];
... область действия ... ... область действия ...

Определение переменной должно производиться только в одном модуле, при трансляции которого она создается и в котором размещается. Соответствие типов переменных в определении и объявлениях транслятором не может быть проверено. Ответственность за это соответствие ложится целиком на программиста.

l Статические переменные. Имеют сходные с внешними переменными характеристики времени жизни и размещения в памяти, то есть создаются и инициализируются транслятором, существуют все время работы программы. Однако статические переменные имеют ограниченную область действия.

l Собственные статические переменные функции имеют синтаксис определения автоматических переменных, предваренный словом static .Область действия аналогична автоматическим - тело функции или блок. При рекурсивном вызове функции не дублируются. Назначение собственных статических переменных - сохранение значений, используемых функцией, между ее вызовами.

l Статические переменные, определенные вне функции, имеют область действия, ограниченную текущим модулем. Они переменные предназначены для создания собственных переменных модуля, которые не должны быть "видны" извне, чтобы не вступать в конфликт с одноименными внешними переменными в других модулях.




Начало  Назад  Вперед



Книжный магазин