В чем различие между стандартной глобальной переменной и статической переменной в контексте области видимости и времени жизни?
Ответ от нейросети
sobes.tech AI
Глобальная переменная в C/C++ объявляется вне всех функций и доступна во всех файлах, если объявлена с внешним связыванием (extern). Время жизни глобальной переменной — от запуска программы до её завершения.
Статическая переменная может быть двух видов:
-
Статическая переменная на уровне файла (static глобальная) — объявлена вне функций с ключевым словом
static. Она видна только в пределах этого файла (область видимости ограничена файлом), но время жизни у неё всё равно от запуска до завершения программы. -
Статическая переменная внутри функции (static локальная) — объявлена внутри функции с
static. Она сохраняет своё значение между вызовами функции, но видна только внутри этой функции. Время жизни — от запуска программы до завершения, но область видимости — локальная.
Пример:
int global_var = 0; // глобальная переменная, видна во всех файлах
static int file_static_var; // статическая переменная файла, видна только в этом файле
void func() {
static int func_static_var = 0; // статическая локальная переменная
func_static_var++;
}
Итого:
- Глобальная переменная: видна во всех файлах (если extern), время жизни — вся программа.
- Статическая переменная файла: видна только в файле, время жизни — вся программа.
- Статическая локальная переменная: видна только в функции, время жизни — вся программа.