При изменении переменной ключевое слово static указывает, что переменная имеет статическую длительность (она выделяется при запуске программы и освобождается при ее завершении), и инициализирует ее значением 0, если не указано другое значение. При изменении переменной или функции в области видимости файла ключевое слово static указывает, что переменная или функция имеет внутреннюю связь (ее имя не видно снаружи файла, в котором она объявлена).
Переменная, объявленная как статическая в функции, сохраняет свое состояние между вызовами этой функции.
При изменении члена данных в объявлении класса ключевое слово static указывает, что одна копия члена является общей для всех экземпляров класса. При изменении функции-члена в объявлении класса ключевое слово static указывает, что функция обращается только к статическим членам.
Статические данные-члены классов должны быть инициализированы в области видимости файла.
В рекурсивном коде статический объект или переменная гарантированно имеют одинаковое состояние в разных экземплярах блока кода.
Члены объединения не могут быть объявлены как статические. Анонимный союз, объявленный глобально, должен быть явно объявлен как статический.
Объекты и переменные, определенные вне всех блоков, имеют статическое время жизни и внешнюю связь по умолчанию. Глобальный объект или переменная, которая явно объявлена как статическая, имеет внутреннюю связь.