Можно ли использовать переменную extern в файле, который не включен ни в один другой файл?
Я встречал много примеров в Интернете, которые имеют extern int x
в main.c, где лежит основная функция.
Единственное использование extern
Мне известно о том, чтобы сделать объявление в другом файле и использовать его в другом файле после его определения.
Нравится: ах: extern int x;
ac: int x = 5;
main.c: #include "a.h" // and start using x
Первый случай кажется мне излишним.
Итак, есть ли возможность использования extern
переменная в файле, который не входит ни в один другой файл?
4 ответа
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
в безымянном пространстве имен в исходном файле.