Проблема с внешними ключевыми словами в c

#c #keyword #extern

#c #ключевое слово #extern

Вопрос:

 extern int i;
void add();

int main()
{
    add();
    if (i == 0)
        printf("scope rulesn");
}

void add()
{
    int i;
}
  

В этом случае я получаю ошибку, даже если переменная i определена в функции добавления

но это не приведет к ошибкам сборки в следующем случае

 extern int i;
void add();

int main()
{
    int i;
    //add();
    if (i == 0)
        printf("scope rulesn");
}

void add(){
    //int i;
}
  

Комментарии:

1. Вам нужно прочитать книгу по C или C , в которой это подробно объясняется.

Ответ №1:

extern Ключевое слово сообщает компилятору предположить, что переменная определена в другом месте (не в этом конкретном файле или единице перевода). Имя переменной будет разрешено на этапе компоновки.

Поэтому, когда вы пишете:

extern int i;

вы должны убедиться, что переменная i определена в другом месте (в другом файле).

И будьте осторожны, чтобы не перепутать этот extern i и local i в вашей add функции — эта локальная переменная имеет область видимости внутри add функции и не имеет ничего общего с переменной extern i .

 void add()
{
    int i;
}