Как работает extern в c ++? - PullRequest
       150

Как работает extern в c ++?

6 голосов
/ 25 марта 2010

Это от <iostream>:

namespace std 
{
  extern istream cin;       ///< Linked to standard input
  extern ostream cout;  
...

Кажется, с помощью extern типы данных, определенные в других пространствах имен, будут просто доступны?

Ответы [ 4 ]

8 голосов
/ 25 марта 2010

extern означает «эти переменные определены в каком-то другом модуле компиляции (файл .cpp или .lib)»

В этом случае вы #include <iostream> добавляете в свой файл .cpp, а поскольку cin и cout объявлены как extern, компилятор позволит вам использовать их без жалоб. Затем, когда компоновщик запускается, он ищет все переменные extern и сортирует их все.

4 голосов
/ 25 марта 2010

extern используется для ссылки на переменную, определенную в другом модуле компиляции (сейчас вы можете рассматривать модуль компиляции как файл .cpp). Операторы в вашем примере объявляют вместо , определяют cin и cout. Это говорит компилятору, что определение этих объектов находится в другом модуле компиляции (где они не объявлены как extern).

2 голосов
/ 25 марта 2010

Нет, это явный способ сказать, что cin и cout объявлены без фактического их определения.

0 голосов
/ 19 августа 2018

Ключевое слово extern сообщает компилятору, что переменная объявлена ​​в другом источнике (т.е. вне текущей области). Затем компоновщик находит это фактическое объявление и устанавливает переменную extern для указания правильного местоположения.

Переменные

, объявленные операторами extern , не будут выделять для них место, так как они должны быть правильно определены в другом месте. Если переменная объявлена ​​ extern , и компоновщик не находит ее фактического объявления, он покажет ошибку.

Например. extern int i;

// это объявляет, что есть переменная с именем i типа int, определенная где-то в программе.

...