Класс хранения
Описатель класса хранения в определении функции предоставляет ей класс хранения extern
или static
.
Синтаксис
function-definition
:
declaration-specifiers
необ. attribute-seq
необ. declarator
declaration-list
необ. compound-statement
/* attribute-seq
используется только в системах Майкрософт */
declaration-specifiers
:
storage-class-specifier
declaration-specifiers
необ.
type-specifier
declaration-specifiers
необ.
type-qualifier
declaration-specifiers
необ.
storage-class-specifier
: /* Для определений функций */
extern
static
Если определение функции не содержит , storage-class-specifier
класс хранилища по умолчанию имеет значение extern
. Вы можете явно объявить функцию как extern
, но она не требуется.
Если объявление функции содержит storage-class-specifier
extern
, идентификатор имеет ту же компоновку, что и любое видимое объявление идентификатора с областью файла. Если нет видимого объявления с областью действия файла, идентификатор имеет внешнюю компоновку. Если идентификатор имеет область файла и нет storage-class-specifier
, идентификатор имеет внешнюю компоновку. Внешняя компоновка означает, что каждый экземпляр идентификатора определяет один и тот же объект или функцию. Дополнительные сведения о компоновке и области файлов см. в разделе "Время существования", "Область", " Видимость" и "Компоновка".
Объявления функций в области видимости блока с описателем класса хранения, отличным от extern
, приводят к ошибкам.
Функция с static
классом хранилища отображается только в исходном файле, в котором он определен. Все остальные функции, независимо от того, предоставляются extern
ли они классу хранилища явно или неявно, отображаются во всех исходных файлах программы. Если требуется класс хранения static
, он должен быть объявлен в первом объявлении функции (при его наличии) и в определении функции.
Блок, относящийся только к системам Майкрософт
При включенных расширениях Майкрософт функции, первоначально объявленной без класса хранения (или с классом хранения extern
), предоставляется класс хранения static
, если определение этой функции находится в том же исходном файле и в нем явно указан класс хранения static
.
При компиляции с параметром компилятора /Ze функции, объявленные в блоке с помощью extern
ключевого слова, имеют глобальную видимость, которая не имеет значения true при компиляции с помощью /Za. Эта функция не должна полагаться на то, если переносимость исходного кода является соображением.
Завершение блока, относящегося только к системам Майкрософт