смысл ключевого слова extern?

Всем привет.Я не понимаю смысл ключевого слова extern. У меня 2 файла компиляции 1.cpp и 2.cpp в 1 пишу объявления функции

int foo();

а во 2 определяю:

int foo(){
return 3;
}

И в чем смысл писать extern,когда если я пишу сигнатуру функции в 1 файле и в нем же его использую без каких либо ошибок? В чем вообще смысл extern и когда в основном это используется?


Ответы (2 шт):

Автор решения: raviga

Если у вас в файле 1.cpp есть функция которую вы хотите использовать в файле 2.cpp без дублирования кода этой функции и выноса ее в заголовочный файл, тогда можете добавить необъязательный оператор extern, который и без того додается ко всем членам одного translation unit, которые не static и он будет скорее явно говорить о том, что данная функция из другого ТЮ.

→ Ссылка
Автор решения: Андрей Соколов

Функцию Вы можете объявлять без extern любое количество раз в разных единицах трансляции. А вот переменную можно объявить только один раз и если она понадобиться в другой единице трансляции - то без extern вам к ней доступа не получить: 1.cpp:

int i; // Объявление и сразу определение

2.cpp:

int i; // объявляем и сразу определяем новую переменную i в глобальной области видимости,  внешнее связывание. Имеем ошибку компиляции.

или:

extern int i; // при линковке объектных файлов, полученных из 1.cpp  и 2.cpp, получаем доступ к i из первого файла.
→ Ссылка