смысл ключевого слова extern?
Всем привет.Я не понимаю смысл ключевого слова extern. У меня 2 файла компиляции 1.cpp и 2.cpp в 1 пишу объявления функции
int foo();
а во 2 определяю:
int foo(){
return 3;
}
И в чем смысл писать extern,когда если я пишу сигнатуру функции в 1 файле и в нем же его использую без каких либо ошибок? В чем вообще смысл extern и когда в основном это используется?
Ответы (2 шт):
Если у вас в файле 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 из первого файла.