// file1.cpp
#include <iostream>

int i;          // global, with external linkage
static int j;   // global, without external linkage
extern int n;   // global, defined somewhere else

namespace X
{
    int i;      // X::i

    int f() // X::f()
    {
        i = n;      // X::i = ::n; 
        return j;   // ::j
    }
    void g(); // X::g()
}

namespace
{
    int k;  // ::k
}

void f()
{
    int i;          // local i
    static int k;   // local k  
    {
        int j = i;  // local j
        int i = j;  // local i

        std::cout << i << j << k << X::i << ::k << ::i;
    }
}   

static void g()
{
    ++k;    // ::k
}

void X::g() // X::g()
{
    ++i;    // X::i
}