Почему «внешний» класс хранения работает по-разному в функциях?

Следующий фрагмент отлично работает

extern int i;
int i;

int main(){
    return 0;
}

Вот что я получил, это то, что я объявлен и затем определен. Так как есть только одно определение, так что это прекрасно.

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

Теперь вышеприведенное дает следующую ошибку

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;

В чем здесь проблема? Здесь также есть единственное определение «я».

Ответы на вопрос(2)

Ваш ответ на вопрос