Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Описатели классов памяти






Различают два класса объектов: глобальные и локальные, но используют четыре описателя классов: extern, static, auto и register. Назначение и применение их приведено в табл. 9.1

Таблица 9.1

 

Классы памяти

Класс памяти Ключевое слово Время действия Область действия
1. Автоматический auto временно локальная
2. Регистровый register временно локальная
3. Статический static постоянно локальная
4. Внешний extern постоянно глобальная (все файлы)
5.Внешний статический static постоянно глобальная (один файл)

 

Классы 1, 2 и 3 описываются внутри функций; Классы 4 и 5 описываются вне функций.

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

Класс памяти extern указывает, что глобальная переменная описана где-то в другом месте (в этом или другом файле). Таким образом, описатель extern позволяет только сослаться на описание, сделанное в другом месте.

Для того, чтобы описание extern было корректным, необходимо чтобы описание самой переменной существовало только один раз в любом из файлов, образующих текст программы, например:

 

Файл 1 файл 2 файл 3

… … …

float p=0.33; extern float p; extern float p;

 

Замечание: Описание вида: extern тип имя_ переменной = значение; недопустимо.

Если переменная внутри функции имеет класс памяти extern, то она может быть описана только после описания этой функции, например:

Неправильно Правильно

… …

main () main ()

{ {

… …

} }

6 func_1() func_1()

{ {

k = k+2 extern int k;

} k = k+2;

int k = 10 }

… int k =10;

Ошибка состоит в том, что область видимости переменной начинается с точки ее описания.

Глобальные переменные могут быть инициализированы:

явно: int k = 10; static float a = 20.52;

неявно int k; static float a;

При неявной инициализации переменным присваиваются нулевые значения.

Класс памяти static на внешнем уровне маскирует описание переменных внутри файла, в котором они описаны. Другим файлам они не недоступны.

Класс памяти register предполагает хранение переменной во внутреннем регистре процессора. Время жизни и область видимости регистровой переменной такая же, как и у автоматической. Если компилятор не может разместить эту переменную в регистре, то она трактуется как автоматическая. По умолчанию значение регистровых переменных не определено.

К регистровой переменной нельзя применить операцию & - определение адреса. Их нельзя описывать на внешнем уровне.

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.006 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал