Классы хранения в 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, используемыми с функциями.
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по