Я встречал много примеров в Интернете, которые имеют extern int x
в main.c, где лежит основная функция.
Единственное использование extern
Мне известно о том, чтобы сделать объявление в другом файле и использовать его в другом файле после его определения.
Подобно :
a.h: extern int x;
a.c: int x = 5;
main.c:
#include "a.h" // and start using x
Первый случай кажется мне излишним.
Так,
Есть ли возможность использования extern
переменная в файле, который не входит ни в один другой файл?
extern
сообщает компилятору, что x
существует в другом модуле и должен быть связан из другого места. Если поместить его в main.c напрямую, это позволит избежать добавления заголовка (который в любом случае будет включен в строку).
Как в заголовке, x
все еще должен существовать в другом модуле .c, где он не определенный extern
,
Переменная extern имеет в основном две функции: одна — использовать переменную в другом файле, а другая — обращаться к глобальным переменным, как показано в следующем коде.
int x=10;
int main()
{
int x=20;
cout<<x; //refers to x=20
if(x==20)
{
extern int x;
cout<<x; //refers to the global x that is x=10
}
}
Конечно. С помощью extern
в файле позволяет использовать эту переменную в тот файл. Это не должно быть включено где-либо еще.
Использование extern
заставляет объект иметь внешнюю связь; в
создать экземпляр шаблона с объектом (а не со значением или типом),
объект должен иметь внешнюю связь (по крайней мере, в C ++ 03). Большинство объектов
определенные в области имен пространства имеют глобальную связь, а объекты const — нет.
Итак, у вас есть что-то вроде:
template <char const* n>
class Toto { /* ... */ };
char const n1[] = "abc";
Toto<n1> t1; // Illegal...
extern char const n2[] = "xyz";
Toto<n2> t2; // Legal...
Это своего рода особый случай, но он заставил меня (один или два раза) использовать
extern
в безымянном пространстве имен в исходном файле.