Классы хранения в C
"Класс хранения" переменной определяет время существования элемента: глобальное или локальное. В языке С это время существования называется "статическое" или "автоматическое". Элемент с глобальным временем существования присутствует и имеет значение на протяжении всего исполнения программы. Все функции имеют глобальное время существования.
Автоматические переменные или переменные с локальным временем существования получают новое место хранения всякий раз, когда контроль исполнения переходит к блоку, в котором они определены. Когда выполнение возвращается, переменные более не имеют понятных значений.
C предоставляет следующие описатели класса хранения:
Синтаксис
спецификатор-класса-хранения:
autoregister
static
extern
typedef
__declspec ( последовательность-модификаторов-расширенного-объявления ) /* Относится только к системам Microsoft */
За исключением __declspec можно использовать только один описатель описатель-класса-хранения в составе описателя-объявления в объявлении. Если нет спецификации класса хранения, объявления в блоке создают автоматические объекты.
Элементы, объявленные с описателем auto или register, имеют локальное время существования. Элементы, объявленные с описателем static или extern, имеют глобальное время существования.
Поскольку typedef и __declspec семантически отличаются от других четырех терминалов описателя-класса-хранения, они обсуждаются отдельно. Подробные сведения о typedef см. в разделе Объявления определений типов. Подробные сведения о __declspec см. в разделе Расширенные атрибуты классов хранения.
Размещение объявлений переменных и функций в файлах исходного кода также влияет на класс хранения и видимость. Объявления вне определений функций отображаются на внешнем уровне. Объявления в составе определений функций отображаются на внутреннем уровне.
Точное значение каждого определителя класса хранения зависит от двух факторов:
уровня отображения объявления (внешний или внутренний)
типа объявляемого элемента (переменная или функция)
В разделах Описатели классов хранения для объявлений внешнего уровня и Описатели классов хранения для объявлений внутреннего уровня описывают терминалы storage-class-specifier в каждом из типов объявлений и поясняют поведение по умолчанию, если storage-class-specifier опущен в переменной. В разделе Описатели класса хранения с объявлениями функций характеризуются описатели класса хранения, используемые с функциями.