реклама на сайте
подробности

 
 
> Использование extern в нескольких файлах
kolobochishe
сообщение Jan 24 2012, 06:18
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 240
Регистрация: 14-04-10
Из: Россия, г.Челябинск
Пользователь №: 56 634



Почему компилятор (IAR) не выдает ошибки в случае если переменная определена как глобальная в 2-х файлах с одним и тем же именем, а в третьем объявлена как extern? На какую из 2-х глобальных переменных в итоге она (объявленная как extern) будет ссылаться?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
andrew_b
сообщение Jan 24 2012, 12:02
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



По умолчанию в Си переменные имеют внешнее связывание, в Си++ -- внутреннее.
Go to the top of the page
 
+Quote Post
dxp
сообщение Jan 24 2012, 15:49
Сообщение #3


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



QUOTE (andrew_b @ Jan 24 2012, 19:02) *
По умолчанию в Си переменные имеют внешнее связывание, в Си++ -- внутреннее.

Константы, вы хотели сказать?


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jan 25 2012, 04:36
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Нет, переменные. И функции тоже. Про константы утверждать не буду, но скорее всего, тоже.
Go to the top of the page
 
+Quote Post
am1808
сообщение Feb 3 2012, 10:11
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 125
Регистрация: 29-05-11
Из: Nizhny Novgorod, Russian Federation
Пользователь №: 65 337



Цитата(andrew_b @ Jan 25 2012, 08:36) *
Нет, переменные. И функции тоже. Про константы утверждать не буду, но скорее всего, тоже.


ключевое слово const ( а также typedef ) дает имени внутреннее связывание.

при использовании имен без headers, например, в файле 1.с

const int a = 5;
то a имеет внутреннее связывание.

для того, чтобы а имела внешнее связывание, нужно

в файле 1.с

объявить a как extern;
Код
extern const int a; //  переменная a теперь будет иметь внешнее связывание


и определить переменную:
Код
const int a = 777; // определяем a


теперь, для использования a в других единицах трансляции нужно просто объявить переменную

файл 2.с:

Код
extern const int a; // далее, можем использовать a



тоже самое достигается путем headera

теперь,
если же мы определяем в header что-то типа:

const int b = 10;

и включаем это header в различные единицы трансляции,
то в каждой единице трансляции создается своя локальная копия b

Сообщение отредактировал am1808 - Feb 3 2012, 10:13
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- kolobochishe   Использование extern в нескольких файлах   Jan 24 2012, 06:18
- - Палыч   Цитата(kolobochishe @ Jan 24 2012, 10:18)...   Jan 24 2012, 06:34
- - XVR   Если программа на С (не С++ !) и переменная в ...   Jan 24 2012, 07:25
|- - Сергей Борщ   QUOTE (XVR @ Jan 24 2012, 09:25) Если про...   Jan 24 2012, 07:33
|- - XVR   Цитата(Сергей Борщ @ Jan 24 2012, 11:33) ...   Jan 24 2012, 08:01
|- - ViKo   Цитата(XVR @ Jan 24 2012, 11:01) Нет, в С...   Jan 24 2012, 08:43
|- - XVR   Цитата(ViKo @ Jan 24 2012, 12:43) Нет, эт...   Jan 24 2012, 10:52
|- - ReAl   Цитата(XVR @ Jan 24 2012, 10:41) Как види...   Jan 24 2012, 11:41
|- - ViKo   Цитата(XVR @ Jan 24 2012, 13:52) Стандарт...   Jan 24 2012, 11:50
|- - Палыч   Цитата(ViKo @ Jan 24 2012, 15:50) Но разв...   Jan 24 2012, 12:00
|- - XVR   Цитата(ViKo @ Jan 24 2012, 15:50) Единств...   Jan 24 2012, 14:18
- - kolobochishe   да. На простом Си. Не инициализирована. Забавно. ...   Jan 24 2012, 07:57
- - kolobochishe   хм... а ИАР мне так не разрешает. Объявления без и...   Jan 24 2012, 08:11
- - demitar   хм, заинтриговали, у меня IAR'овский линкер на...   Jan 24 2012, 08:12
- - kolobochishe   а так у меня Error[Li006]: duplicate definitions...   Jan 24 2012, 08:20
- - demitar   у меня старый иар, поэтому сообщения отличаются, н...   Jan 24 2012, 08:25
- - kolobochishe   Понятно Спасибо за разъяснения. Почему то всегда ...   Jan 24 2012, 08:30
|- - XVR   Цитата(kolobochishe @ Jan 24 2012, 12:30)...   Jan 24 2012, 08:41
- - Marto   XVR, а мне помнится, что во исходном файле глобаль...   Feb 14 2012, 05:42
- - XVR   Цитата(Marto @ Feb 14 2012, 09:42) а мне ...   Feb 14 2012, 08:18


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 12th August 2025 - 17:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01405 секунд с 7
ELECTRONIX ©2004-2016