Sobes.tech
Back to questions
Junior — Middle
85

В чем различие между стандартной глобальной переменной и статической переменной в контексте области видимости и времени жизни?

Answer from AI

sobes.tech AI

Глобальная переменная в C/C++ объявляется вне всех функций и доступна во всех файлах, если объявлена с внешним связыванием (extern). Время жизни глобальной переменной — от запуска программы до её завершения.

Статическая переменная может быть двух видов:

  1. Статическая переменная на уровне файла (static глобальная) — объявлена вне функций с ключевым словом static. Она видна только в пределах этого файла (область видимости ограничена файлом), но время жизни у неё всё равно от запуска до завершения программы.

  2. Статическая переменная внутри функции (static локальная) — объявлена внутри функции с static. Она сохраняет своё значение между вызовами функции, но видна только внутри этой функции. Время жизни — от запуска программы до завершения, но область видимости — локальная.

Пример:

int global_var = 0;          // глобальная переменная, видна во всех файлах
static int file_static_var;  // статическая переменная файла, видна только в этом файле

void func() {
    static int func_static_var = 0; // статическая локальная переменная
    func_static_var++;
}

Итого:

  • Глобальная переменная: видна во всех файлах (если extern), время жизни — вся программа.
  • Статическая переменная файла: видна только в файле, время жизни — вся программа.
  • Статическая локальная переменная: видна только в функции, время жизни — вся программа.