Внешние
Объекты и переменные, объявленные как extern, объявляют объект, определенный в другой записи преобразования или во внешней области видимости, как имеющий внешнюю компоновку.
Объявление переменных const с классом хранения extern принудительно задают для переменной внешнюю компоновку. Инициализация переменной extern const допускается в записи преобразования, в которой эта переменная определена. Инициализации в записях преобразования, отличных от записи, содержащей определение, дает неопределенные результаты.
В следующем коде показаны два объявления extern, DefinedElsewhere (обозначает имя, определенное в другой записи преобразования) и DefinedHere (обозначает имя, определенное во внешней области видимости):
// external.cpp
// defined in another translation unit
extern int DefinedElsewhere;
int main() {
int DefinedHere;
{
// refers to DefinedHere in the enclosing scope
extern int DefinedHere;
}
}