Warum funktioniert die Speicherklasse 'extern' in Funktionen anders?

Das folgende Snippet funktioniert gut

extern int i;
int i;

int main(){
    return 0;
}

Hier habe ich, 'i' wird deklariert und dann definiert. Da es nur eine Definition gibt, ist das vollkommen in Ordnung.

int main(){
    extern int i;
    int i;
    return 0;
}

Now, der obige gibt den folgenden Fehler

new.cpp: In function ‘int main()’:
new.cpp:5:6: error: redeclaration of ‘int i’
  int i;
      ^
new.cpp:4:13: note: previous declaration ‘int i’
  extern int i;

Was ist das Problem hier? Auch hier gibt es nur eine Definition von 'i'.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage