extern
- это спецификатор класса хранения .Это просто факт языковой грамматики.extern
влияет на семантику программы в зависимости от того, где она используется.Это не имеет одинакового эффекта везде.Он влияет на продолжительность хранения и связь объектов, а также помогает определить, являются ли некоторые объявления также определениями.
Например:
int a; // Ex1
extern int b; // Ex2
Например, если Ex1
и Ex2
где в глобальном масштабе тогда они оба будут ссылаться на объекты со статической продолжительностью хранения и внешней связью.В C ++, тем не менее, первое будет определением (предварительное определение в C), а второе - нет.В этом примере extern
не изменил продолжительность хранения или связь объявленного объекта.
Если бы Ex1
и Ex2
произошли в теле функции, тогда a
будет ссылаться на объект с автоматическим хранениемдлительность и отсутствие связи, но b
будет относиться к объекту с внешней связью и статической продолжительностью хранения.В этом примере extern
повлиял на значение объявления как в отношении связывания, так и в отношении продолжительности хранения и того, является ли оно определением.
Наконец, в C ++ приведен пример, где единственный эффект extern
меняет связь с внутренней на внешнюю.
const int c = 5; // static storage duration, internal linkage
extern const int d = 10; // static storage duration, external linkage