Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2023, 19:33   #1
jemand
Пользователь
 
Регистрация: 22.05.2015
Сообщений: 13
По умолчанию Си и Extern

Есть ли такой случай, когда ключевое слово еxtern нельзя опустить? У меня для глобальных переменных и для функций, объявленных в других файлах, все находит и как надо работает без этого определения.

Последний раз редактировалось jemand; 22.01.2023 в 20:51.
jemand вне форума Ответить с цитированием
Старый 22.01.2023, 21:00   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

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

Цитата:
Чтобы уточнить, использование extern int x; сообщает компилятору, что объект типа int с именем x где-то существует. Задача компилятора не в том, чтобы знать, где он существует, ему просто нужно знать тип и имя, чтобы знать, как его использовать. Как только все исходные файлы будут скомпилированы, компоновщик разрешит все ссылки x на одно определение, которое он найдет в одном из скомпилированных исходных файлов. Чтобы это сработало, определение x переменная должна иметь так называемую “внешнюю привязку”, что в основном означает, что она должна быть объявлена вне функции (в том, что обычно называется “областью действия файла”) и без ключевого слова static.
https://stackoverflow.com/questions/...se-extern-in-c
macomics вне форума Ответить с цитированием
Старый 22.01.2023, 21:07   #3
maks1331
Форумчанин
 
Аватар для maks1331
 
Регистрация: 20.12.2016
Сообщений: 270
По умолчанию

Есть, когда получается
Код:
multiple definition of
Например, когда у нас есть заголовочный файл с объектом, который мы хотим видеть во всех классах, каждый из которых описан в отдельном файле
формошлеп.рф
witech.su
maks1331 вне форума Ответить с цитированием
Старый 22.01.2023, 22:03   #4
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Вот тут как раз пример появился https://www.programmersforum.ru/showthread.php?t=344904
macomics вне форума Ответить с цитированием
Старый 23.01.2023, 02:52   #5
jemand
Пользователь
 
Регистрация: 22.05.2015
Сообщений: 13
По умолчанию

Спасибо большое за разъяснение и пример.
jemand вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
extern zla9_kolu4ka Общие вопросы C/C++ 6 10.06.2014 23:16
Extern/export Red_Line Общие вопросы C/C++ 1 02.09.2011 13:50
extern Linnk Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 13.08.2010 15:47
extern переменные BioS Общие вопросы C/C++ 0 05.06.2010 23:29
Переменная extern zgest Общие вопросы C/C++ 1 16.02.2010 14:28