extern, mutable и static. В этом разделе обсуждаются спецификаторы класса
памяти auto, register, extern и static. Спецификатор mutable используется исключительно в классах.
Класс памяти идентификатора определяет период времени, в течение
которого этот идентификатор существует в памяти.
Категории классов памяти
Спецификаторы класса памяти могут быть разбиты на два класса:
автоматический класс памяти и статический класс памяти. Для объявления
переменных автоматического класса памяти используются ключевые слова auto
и register. Такие переменные создаются при входе в блок, в котором они
объявлены, существуют, пока блок активен, и уничтожаются, когда программа
выходит из блока.
Статический класс памяти
Ключевые слова extern и static объявляют идентификаторы для
переменных статического класса памяти и для функций. Переменные статического
класса памяти существуют с момента, когда программа начинает
исполняться, и сохраняются в течение всего периода ее выполнения. Память для
переменной статического класса памяти выделяется в начале исполнения
программы. Такая переменная инициализируется единственный раз, когда программа
встречает ее объявление. Что касается объявленных таким образом функций,
то имя такой функции тоже существует с самого начала исполнения
программы, как и имена всех остальных функций. Однако даже если переменные
и имена функций существуют с самого начала исполнения программы, это не
означает, что эти идентификаторы могут использоваться во всей программе.
Класс памяти и область действия (где можно
использовать имя) — это разные понятия.