Невозможно использовать extern и статические спецификаторы класса хранения вместе - PullRequest
1 голос
/ 13 октября 2011

В C99 6.7.1 написано

В объявлении может быть указан не более одного спецификатора класса хранения. спецификаторы в объявлении

Я знаю, extern и static оба являются спецификаторами класса хранения, но extern в основном сообщает компилятору, что переменная объявлена ​​в другом месте, и беспокоится об этом позже. extern и static для меня НЕ взаимоисключающие. Вполне возможно, что что-то может быть extern и static.

Почему мы не можем использовать extern и static вместе? Есть ли веская причина, кроме того, что стандарт просто говорит, нет?

Ответы [ 2 ]

5 голосов
/ 13 октября 2011

Ну, static означает Internal Linkage, extern означает External Linkage.

Internal Linkage относится ко всему только в рамках единицы перевода.

External Linkage относится к вещам, которые существуют за пределами определенной единицы перевода.Другими словами, доступны через всю программу.

Так что оба являются взаимоисключающими.

0 голосов
/ 13 октября 2011

«Static» вне всех блоков означает «внутренняя связь», «extern» означает внешнюю связь. Что должно означать статическое внешнее? Внутренняя внешняя связь ???

...