#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;
}