Есть ли возможность использовать переменную extern в файле, который не включен ни в один другой файл?

Я встречал много примеров в Интернете, которые имеют 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 переменная в файле, который не входит ни в один другой файл?

2

Решение

extern сообщает компилятору, что x существует в другом модуле и должен быть связан из другого места. Если поместить его в main.c напрямую, это позволит избежать добавления заголовка (который в любом случае будет включен в строку).

Как в заголовке, x все еще должен существовать в другом модуле .c, где он не определенный extern,

2

Другие решения

Переменная 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
}
}
2

Конечно. С помощью extern в файле позволяет использовать эту переменную в тот файл. Это не должно быть включено где-либо еще.

1

Использование 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 в безымянном пространстве имен в исходном файле.

0
По вопросам рекламы [email protected]