|
2 / 5 / 1
Регистрация: 13.09.2015
Сообщений: 100
|
|
Зачем нужен extern?20.07.2016, 13:14. Показов 6622. Ответов 10
Метки нет (Все метки)
Знаю, что в интернете полно объяснений зачем он, но я не могу понять...
Везде пишут, что он "позволяет объявить переменную без её определения т.е без выделения памяти" Но я могу сделать то же самое и без extern, просто не написав значения (int a; - это же тоже объявление) Допустим в заголовке пишу int a=10, а в исполнительном файле cout << a; на экране 10 То же самое и с extern Это же лишние строчки кода, разве не так? --------------------------------------------------------------------- Другой момент зачем он нужен для функций?
0
|
|
| 20.07.2016, 13:14 | |
|
Ответы с готовыми решениями:
10
Объяснить зачем нужен i
|
| 20.07.2016, 13:17 | ||
|
Посмотрите в окне отладчика. extern нужен например для того, чтобы обращаться к переменной, определенной в другом файле исх. кода.
0
|
||
|
Неэпический
|
||||||
| 20.07.2016, 13:23 | ||||||
|
скомпилируйте их, а потом слинкуйте, получите по башке от линкера, т.к. каждый объектник имеет 'a' и не понятно какой из них использовать. В заголовке - extern int a;В .cpp - int a = 10;И всё нормально. Вам нужно не разбираться с тем, что такое extern, а нужно разобраться с тем, к чему приводит его использование, а именно - к внешней линковке (external linkage), или его не использование - к внутренней линковке (internal linkage). Для внутренней линковки - static или безымянный namespace, для внешней - extern. Так что гуглите не назначение extern, а тему "Раздельная компиляция".
0
|
||||||
|
2 / 5 / 1
Регистрация: 13.09.2015
Сообщений: 100
|
||
| 20.07.2016, 13:23 [ТС] | ||
|
0
|
||
| 20.07.2016, 13:30 | ||
|
А компоновщик начинает свою работу, только после стадии компилирования. В этом случае компилятор выдаст сообщение, что переменная (которая по факту располагается в другом файле) не определена. А поскольку компиляция не была удачной, линкер не начнет своей работы.
0
|
||
|
Неэпический
|
||||
| 20.07.2016, 13:32 | ||||
|
Добавлено через 48 секунд Компилятору достаточно объявления, он не будет искать определения.
0
|
||||
| 20.07.2016, 13:32 | |
|
Croessmah, ну да, мб и так) Я просто в общих чертах знаю, как этот процесс происходит, а в детали не углублялся)
0
|
|
|
2 / 5 / 1
Регистрация: 13.09.2015
Сообщений: 100
|
|
| 20.07.2016, 13:34 [ТС] | |
|
Croessmah, Ferrari F1, спасибо! вроде бы разобрался. А теперь итог: это же всё равно зло - ведь мы идём на использование глобальных переменных?
0
|
|
| 20.07.2016, 13:36 | ||
|
0
|
||
|
Неэпический
|
|||
| 20.07.2016, 13:38 | |||
![]() Добавлено через 2 минуты никакие определения искать не будет, тем более, выдавать ошибки о том, что определение не найдено. Он будет ругаться на отсутствие объявления. Если же объявление есть, то компилятор ругаться не будет. Далее за работу примется компоновщик, а у него может быть несколько вариантов, например, если как у ТС в первом посте, то получим multiple definition, либо unresolved external ..., если объявление есть, а определения нет. P.S. Выше я немного не так выразился, возможно несколько не понятно
0
|
|||
| 20.07.2016, 13:43 | |||
|
Просто писал быстро, особо не заморачиваясь, поэтому и возникла ошибка. Но на понятийном уровне, эти две разницы четко осознаю)
0
|
|||
| 20.07.2016, 13:43 | |
|
Помогаю со студенческими работами здесь
11
Зачем нужен static
Зачем нужен полиморфизм зачем нужен параметр Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
|
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|