В языке программирования C существует четыре типа классов хранения: auto, extern, static и register. Каждый из них имеет свое назначение и применение.
Auto
Класс хранения auto используется для локальных переменных внутри функций. При объявлении переменной с классом хранения auto она создается при входе в функцию и уничтожается при выходе из нее. При каждом вызове функции переменная создается заново и инициализируется.
Extern
Класс хранения extern используется для объявления переменных или функций, которые определены в других файлах. При объявлении переменной или функции с классом хранения extern она получает глобальную область видимости и может быть использована в любой функции.
Static
Класс хранения static используется для локальных переменных внутри функций и глобальных переменных. Переменная с классом хранения static создается только один раз. Она сохраняет свое значение между вызовами функции или между различными файлами.
Register
Класс хранения register используется для объявления переменных, которые должны быть помещены в регистры процессора, чтобы обеспечить быстрый доступ к ним. При объявлении переменной с классом хранения register компилятор может поместить ее в регистры процессора, если это возможно.
Класс хранения | Назначение | Область видимости | Инициализация | Хранение в памяти |
---|---|---|---|---|
Auto | Локальные переменные внутри функций | Локальная | Неявная (мусорное значение) или явная | Стек |
Extern | Переменные или функции, определенные в других файлах | Глобальная | Неявная (ноль) или явная | Внешняя |
Static | Локальные переменные внутри функций или глобальные переменные | Локальная или глобальная | Неявная (ноль) или явная | Статическая |
Register | Переменные, которые должны быть помещены в регистры процессора | Локальная | Неявная (мусорное значение) или явная | Регистры процессора или стек |