Статическая переменнаяпеременная, значение которой сохраняется после выхода из блока до повторного входа в него. При объявлении статической переменной используется ключевое слово static. Статической может быть объявлена как внешняя, так и внутренняя переменная.
Статические переменные во многом похожи на внешние. Они инициализируются нулем и существуют на протяжении жизни программы (в отличии от автоматических переменных, существующих лишь во время жизни блока).
Внешняя статическая переменная объявляется вне функции, но известна лишь в том файле, в котором она объявлена (даже при использовании ключевого слова external). Если внешняя переменная используется лишь в том файле, в котором она объявлена, ее следует сделать статической. Это повышает удобочитаемость и улучшает структуру программы. Кроме того, это позволяет избежать конфликтов с другими файлами, в которых могут содержаться те же имена внешних переменных, используемых в других целях.
Внутренняя статическая переменная объявляется внутри функции. В отличии от автоматической переменной, она существует на протяжении жизни всей программы.
Статические переменные инициализируются лишь однажды, перед выполнением программы, и сохраняют свои значения от одного вызова функции к другому.
Пример 1
static void errmsg (void);
static int count;                /*внешняя статическая переменная*/
int adjust_total (int amount)
{
   static int total = 1024;      /*внутренняя статическая переменная*/
   int x = 0;

   total -= amount;
   ...
}
/* статическая функция является приватной в ее исходном файле */
static void errmsg (void)
{
...
}