⚡️ Один `static` - три разных смысла. Добро пожаловать в C.

⚡️ Один `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.

2