Насколько я понимаю, локальная статическая переменная имеет "область действия программы"; то есть после определения он живет до тех пор, пока программа не завершится. Кроме того, я понимаю, что локальная статика также доступна за пределами текущего модуля/C-файла, в котором они определены:
void doSomething() {
static int myVar = 5; // Program scope & accessible to other modules
}
Мое понимание заключается в том, что глобальные статические переменные также имеют область действия программы, но они видны только текущему модулю/C-файлу:
static int myVar = 5; // Program scope but "module private"
void doSomething() {
// Whatever here...
}
Разве это не немного назад? Я ожидал, что все будет наоборот. Поэтому я спрашиваю: правильно ли мое понимание выше? Если да, то какова мотивация того, чтобы локальная статика была доступна за пределами их текущего модуля, но не глобальная статика?