Если для переменных или функций указан класс памяти static, то они видимы только в том модуле, где определены. По умолчанию статические переменные имеют нулевое значение.


Если статическая переменная определена внутри функции, то она инициализируется при самом первом входе в блок функции и в дальнейшем сохраняет свое значение от одного вызова функции до другого. Таким образом, статические переменные можно использовать для хранения значений внутри функции в течение всего времени работы программы. Причем такие переменные невидимы вне модуля, где они определяются.