Название «статическая» означает, что переменная сохраняет свое значение после выхода из функции. Область видимости статических локальных переменных такая же, как автоматических, но они не исчезают при завершении функции, которая их содержит. Таким образом, статический класс памяти имеет область видимости в пределах блока, но статическую продолжительность хранения. Компьютер запоминает значения статических переменных в промежутках между вызовами функции.
void Stat()
{
int i;
for (i=0; i< 3; i++)
printf ("\nValue=%d",GetNext());
printf ("\n");
}
int GetNext()
{
static int X=0;
return (X++); // (X++) == X++, Возвращается X, а не X++
}
Результат:
Value=0
Value=1
Value=2
Следует отметить, что переменные типа static могут также объявляться вне всех функций. При этом создается внешняя статическая переменная. Различие между обычной и статической внешней переменной состоит в их связывании. Обычная внешняя переменная может использоваться функциями в любом модуле программы (требуется объявление его в этом модуле как extern), а статическая – только функциями одного модуля (недопустимо extern static).
Имена статических локальных переменных известны только функции или блоку кода в которых они объявлены, а имена статических глобальных переменных известны только в файле, в котором они находятся. В сущности, модификатор static разрешает использование функциями переменных, не беспокоя другие функции. Статические переменные позволяют «прятать» части программы.