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

Другие вопросы по тегам