int i;
Здесь переменная я объявлен и память выделяется для него, но не инициализируется.
extern int i;
Всякий раз, когда используется extern, переменная объявляется и память не выделяется для нее. Чтобы получить к нему доступ, вы должны повторно использовать одну и ту же переменную извне. Здесь extern ссылается на это, вы будете определять значение этой переменной (i) вне программы (внешний источник). В вашем случае вы делаете это внутри, так что он не будет работать так, как вы ожидали. Он может быть определен как вне основной программы, так и внешними программами.
Попробуйте это:
#include<stdio.h>
int main()
{
extern int i; //Declared but memory not allocated
printf("%d",i);
return 0;
}
int i=20; //Allocated memory for i and initialized to 20 outside the prog
Выход:
20
Глобальные ехЬегп переменные также могут быть инициализированы непосредственно, где, как локальные переменные ехЬегп не может быть.
#include<stdio.h>
extern int i=10; //Declared, Memory allocated and defined.
int main()
{
extern int j; //Declared but memory not allocated
printf("%d --> %d",i,j);
return 0;
}
int j=20; //Memory Allocated and value defined externally.
Выход:
10 --> 20
Вы также можете обратиться к этой link, чтобы узнать больше об этом.
* Как это работает? Вы получаете ошибки компиляции? Ошибки компоновщика? Ошибки времени выполнения? –