Поделиться через


Классы хранения в C

"Класс хранения" переменной определяет время существования элемента: глобальное или локальное. В C эти два времени существования называются "статическое" и "автоматическое". Элемент с глобальным временем существования существует и имеет значение на протяжении всего выполнения программы. Все функции имеют глобальное время существования.

Автоматическим переменным или переменным с локальным временем существования выделяется новое хранилище каждый раз, когда управление выполнением передается блоку, в котором они определены. Когда выполнение возвращается, переменные более не имеют понятных значений.

C предоставляет следующие описатели класса хранения:

Синтаксис

storage-class-specifier:
auto
register
static
extern
typedef
__declspec (extended-decl-modifier-seq) /* Только для систем Майкрософт */

__declspecЗа исключением , в объявлении declaration-specifier можно использовать только один storage-class-specifier из них. Если нет спецификации класса хранения, объявления в блоке создают автоматические объекты.

Элементы, объявленные с описателем auto или register , имеют локальное время существования. Элементы, объявленные с описателем static или extern , имеют глобальное время существования.

Поскольку typedef и __declspec семантически отличаются от других четырех storage-class-specifier терминалов, они рассматриваются отдельно. Подробные сведения о typedef см. в статье Объявления typedef. Подробные сведения о __declspec см. в статье Расширенные атрибуты классов хранения в C.

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

Точное значение каждого определителя класса хранения зависит от двух факторов:

  • уровня отображения объявления (внешний или внутренний)

  • типа объявляемого элемента (переменная или функция)

Описатели класса хранения для объявлений External-Level и описатели класса хранения для Internal-Level объявлений описывают storage-class-specifier терминалы в каждом типе объявления и объясняют поведение по умолчанию, когда storage-class-specifier объект опущен из переменной. Статья Описатели классов хранения с объявлениями функций поможет разобраться с описателями storage-class, используемыми с функциями.

См. также

Объявления и типы