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


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

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

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

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

Синтаксис

  • спецификатор-класса-хранения:
    auto

    register

    static

    extern

    typedef

    __declspec ( последовательность-модификаторов-расширенного-объявления ) /* Относится только к системам Microsoft */

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

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

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

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

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

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

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

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

См. также

Основные понятия

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