The linkages implied by successive declarations for a given entity shall agree. That is, within a given scope, each declaration declaring the same object name or the same overloading of a function name shall imply the same linkage.
As b is declared as static first it has internal linkage any further declaration of b in the same scope has the same linkage as the first.
Basically, it ignores 'extern' and treats it as the first occurrence, 'static'. If externint b; were declared first, then any subsequent declarations of 'b' would have external linkage, regardless of how they are declared.
Here, maybe this will help: staticint b; // b has internal linkage
externint b; // b has external linkage
1 2
staticint b; // b has internal linkage
externint b; // b still has internal linkage
1 2
externint b; // b has external linkage
staticint b; // b still has external linkage
1 2
staticint a; // a has internal linkage
externint c; // c has external linkage
To be honest I'm not completely sure on this but here is how I think it works:
1 2 3 4 5 6 7
int i; // extern linkage
static j; // internal linkage
// declare to compiler that there is a symbol
// with extern linkage elsewhere.
extern k; // Note: this does create k, just adds it to the symbol table
So the static keyword directs the compiler to issue assembler to create a variable with internal linkage. Not using the static keyword causes the compiler to export the symbol of the variable it creates.
However the extern keyword does not actually create anything, but tells the compiler that something was created elsewhere that does have external linkage. That means it must have been defined without the static keyword.
So saying 'static' makes an item internal. No keyword makes an item external. The extern keyword is simply a hopeful promise to the compiler that an externally linkable definition exists somewhere else.
There are many rules that define if a name has external linkage, internal linkage, or no linkage. It depends on storage class, scope, translational unit, etc. Specifically in this thread we are talking about redefining a name within the same scope, in this case the linkage of any redeclaration is the same as the linkage of the first declaration.
Edit:
The standard takes about two pages for the basic overview of the rules.