Я понимаю, что создание чего-то статического создает внутреннюю связь, и другие единицы перевода не могут получить доступ к символу. Может кто-нибудь объяснить, почему создание статического делает это? это из стандартного или некоторого языкового трюка, который делает переменную невидимой со статическим объявлением?
static
может сбить с толку, потому что он имеет несколько разных значений в зависимости от контекста. В этот контекст, это означает, что определяемая переменная видна только в текущей единице перевода:
int i; // visible in all translation units
static int j; // visible only in the current translation unit
Других решений пока нет …