Спецификаторы статических классов хранения
Статические спецификаторы класса хранения static и extern можно применять для объектов и функций. В следующей таблице показано, где можно использовать ключевые слова static и extern и где невозможно.
Использование ключевых слов static и extern
Конструкция |
Можно ли использовать ключевое слово static? |
Можно ли использовать ключевое слово static? |
---|---|---|
Объявления функций в блоке |
Нет |
Да |
Формальные аргументы для функции |
Нет |
Нет |
Объекты в блоке |
Да |
Да |
Объекты вне блока |
Да |
Да |
Функции |
Да |
Да |
Функции-члены класса |
Да |
Нет |
Данные членов класса |
Да |
Нет |
Имена typedef |
Нет |
Нет |
Имя, заданное с помощью ключевого слова static, имеет внутреннюю компоновку, за исключением статических членов класса с внутренней компоновкой. То есть оно невидимо за пределами текущей записи преобразования. Имя, заданное с помощью ключевого слова extern, имеет внешнюю компоновку, если ранее не определено как имя с внутренней компоновкой. Дополнительные сведения о видимости имен см. в разделах Область и Программа и компоновка.
Примечание
Функции, объявленные как inline и не являющиеся функциями-членами класса, получают те же характеристики компоновки, что и функции, объявленные как static.
Имя класса, объявление которого еще не обнаружено компилятором, можно использовать в объявлении extern. Имя, введенное с таким объявлением, невозможно использовать до тех пор, пока не будет обнаружено объявление класса.