Неправильно говорить, что статические переменные «недоступны» извне. Заявление о том, что static
не имеет абсолютно никакого отношения к возможности внешнего доступа.
Когда некоторая сущность объявляется static
, это означает только то, что эта сущность не будет связана с другими сущностями с тем же именем в других единицах перевода.
Например, когда вы объявляете два extern
имен переменных a
в разных единицах перевода, эти переменные на самом деле одинаковы, одна переменная . Когда вы объявляете две static
переменные с именем a
в разных единицах перевода, эти переменные две разные независимые переменные . Это то, что static
делает в C. Ничего другого.
Говоря более повседневно, невозможно связать со статическими переменными извне, т.е. невозможно попросить компоновщика разрешить нам доступ к статической переменной по имени из вне. Однако всегда можно получить к нему доступ другим способом, например, через указатель, при условии, что вам удалось каким-то образом получить этот указатель.