Не могу понять объявление № 3 в Примере [basic.link] / 6 C ++ 14
[Basic.link] / 6
Имя функции, объявленной в области видимости блока, и имя переменной, объявленной в области видимости блокаextern
декларация имеет связь. Если естьвидимый объявление сущности со связью, имеющей то же имя и тип, игнорируя сущности, объявленные вне самой внутренней охватывающей области пространства имен, объявление области блока объявляет ту же сущность и получает связь предыдущей декларации. Если существует более одного такого совпадающего объекта, программа является некорректной. В противном случае, если соответствующий объект не найден, объект области блока получает внешнюю связь. [Пример:
static void f();
static int i = 0; // #1
void g() {
extern void f(); // internal linkage
int i; // #2 i has no linkage
{
extern void f(); // internal linkage
extern int i; // #3 external linkage
}
}
Есть три объекта с именемi
в этой программе. Объект с внутренней связью, введенный объявлением в глобальной области видимости (строка # 1), объект с автоматической продолжительностью хранения и без связи, введенный объявлением в строке # 2, и объект сстатическая продолжительность хранения и внешняя связь введены декларацией в строке № 3. - конец примера]
У меня есть два комментария об этом абзаце:
static int i = 0;
объявление в глобальной областине видимый внутри блока, содержащего объявлениеextern int i;
(# 3). Поэтому мы можем только сказать, что это последнее объявление имеет внешнюю связь, то есть мы не можем связать его с объявлением # 1.В противном случае, если декларацияstatic int i;
объявление # 3 считается видимым, чем в соответствии с текстом в параграфе, объявление области видимости блока объявляет ту же сущность и получает связь предыдущего объявления, то есть внутреннюю связь, а не внешнюю связь, как указано в Пример.Что мне здесь не хватает?