Подтвердить что ты не робот

Что такое класс хранения по умолчанию для глобальных переменных?

Что такое класс хранения по умолчанию глобальной переменной?

Во время поиска в Интернете я обнаружил, что некоторые сайты говорят, что это static. Но статические средства внутренней привязки и переменная не могут быть доступны за пределами области файла, то есть она не должна быть доступна для других объектных файлов. Но к ним все еще можно получить доступ к другим файлам, используя объявления типа extern int i.

И, если я явно упоминаю static для глобальной переменной, то он недоступен вне области действия.

Затем, каков правильный класс хранения по умолчанию для глобальных переменных?

4b9b3361

Ответ 1

Продолжительность хранения по умолчанию - статическая, но привязка по умолчанию - внешняя. Ты не единственный, кто нашел его немного запутанным. C-книга (всегда хорошая ссылка) гласит:

"Вы, вероятно, найдете взаимодействия между этими различными элементами как сложный, так и запутанный: это потому что они!"

Раздел с этой цитатой Объявления, определения и доступность содержит полезную таблицу (8.1). Последняя строка описывает интересующий вас случай. Как отмечается, объекты данных без спецификатора класса хранения имеют внешнюю связь и статическую продолжительность.

Ответ 2

Нет "класса хранения по умолчанию" для того, что обычно называют "глобальными" переменными. Когда переменная определена в области пространства имен, она всегда имеет статическую продолжительность хранения. Невозможно изменить это, поэтому идея о "дефолте" здесь не применима. (И срок хранения - это то, что он правильно назвал.)

Когда вы применяете ключевое слово static к переменной, определенной в области пространства имен, это не влияет на ее длительность хранения - она ​​уже статична и остается статической, но она влияет на ее связь. Ключевое слово static изменяет привязку такой переменной от внешнего (по умолчанию) к внутреннему. Linkage - отдельная концепция, практически не связанная с продолжительностью хранения.