⚡️ Один `static` - три разных смысла. Добро пожаловать в C.
В C ключевое слово static меняет поведение в зависимости от того, где именно оно написано.
1. static у глобальной переменной
static int global;
Переменная имеет internal linkage - она доступна только внутри текущего .c файла.
Это удобный способ спрятать детали реализации модуля.
2. static внутри функции
void foo(void) {
static int count;
count++;
}
count не создаётся заново при каждом вызове.
Он существует всё время работы программы и сохраняет значение между вызовами функции.
foo(); // count = 1
foo(); // count = 2
foo(); // count = 3
3. static у функции
static void bar(void) {
}
Функция становится видна только внутри текущего translation unit.
Другой .c файл вызвать bar() напрямую уже не сможет.
Итого:
static global variable -> скрыть символ внутри файла
static local variable -> сохранить состояние между вызовами
static function -> скрыть функцию внутри файла
🔥 Поэтому static в C полезнее воспринимать не как одно конкретное поведение, а как подсказку проверить две вещи:
lifetime и linkage.