I'm a bit puzzled by the following from chapter 3.5 of the C++ standard:

"The name of a function declared in block scope, and the name of an object declared by a block scope extern declaration,
have linkage. If there is a visible declaration of an entity with linkage having the same name and type, ignoring entities
declared outside the innermost enclosing namespace scope, the block scope declaration declares that same entity and
receives the linkage of the previous declaration. If there is more than one such matching entity, the program is ill-formed.
Otherwise, if no matching entity is found, the block scope entity receives external linkage.[ Example:
Code:
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
}
}
There are three objects named i in this program. The object with internal linkage introduced by the declaration in
global scope (line //1 ), the object with automatic storage duration and no linkage introduced by the declaration on line
//2, and the object with static storage duration and external linkage introduced by the declaration on line //3. —end
example ]"

On the basis of the above explanation, I would have expected the object declared in line //3 to be the same one that is defined in line 1//. Can anyone enlighten me as to why it isn't? Also, if they are two different variables, how would you distinguish between them in this translation unit?

Many thanks for any help.