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


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

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

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

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

Синтаксис

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

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

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

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

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

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

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

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

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

См. также

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