Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Ключевое слово extern в C++

S H O K E R Мастер (1567), закрыт 11 лет назад
Доброго вечера всем пользователям mail.ru.

Объясните пожалуйста, в чем разница между объявлениями:

extern const int i = 5;
const int i = 5;

Переменные объявляются в заголовочном файле, этот файл подключается к программе и константа выводится на экран. В книге "Философия C++" было написано, что инструкция "const int i" не позволит пользоваться этой переменной в других файлах, поэтому нужно писать "extern const int i". Однако переменная видна в любых исходных файлах, в которых я подключаю заголовок, содержащий эту константу.

Среда: Dev-C++ 4.9

Также буду рад, если кто-нибудь объяснит мне вообще смысл слова "extern" в C++ и ситуации, в которых следует его применять.
Лучший ответ
Зло Просветленный (38821) 11 лет назад
extern cоnst int i = 5;
cоnst int i = 5;
это бред сивой кобылы =)
стало легче? =))
extern означает, что сейчас мы будем использовать хренотень, которая описана в другом месте. сейчас мы это место с помощью #include не подключаем, но когда понадобится - обязательно подключим ( ну, или место это находится ниже по коду )
ЗлоПросветленный (38821) 11 лет назад
например

extern class B;
class A
{
B* m_b;
};

class B
{
char[] = "WTF?";
};
ЗлоПросветленный (38821) 11 лет назад
накосячил, пьян.
вместо
extern class B;
правильно просто
class B;
но смысл тот же самый
S H O K E R Мастер (1567) Насчет первого применения понял, спасибо :) Мне непонятно использование extern с константами. Я бы давно забил, мне просто любопытно, почему Эккель сказал, что без использования экстерна константу не будет видно в других файлах.
Остальные ответы
Вадим Орлов Ученик (221) 11 лет назад
Как правило, extern используют для переменных и констант, описанных в другом модуле.
То есть если глобальная переменная используется в нескольких модулях, то в одном
модуле её описывают напрямую, а в остальных - через extern.
Что касается глобальных констант, то их удобнее определять через #define и хранить
в одном h-файле, который включать через #include во все нужные модули.
Похожие вопросы