Форум программистов, компьютерный форум CyberForum.ru

Внутренние и внешние связи - C++

Восстановить пароль Регистрация
 
Игорюня
 Аватар для Игорюня
20 / 16 / 7
Регистрация: 07.12.2013
Сообщений: 244
18.02.2014, 11:37     Внутренние и внешние связи #1
C++
1
2
3
4
5
int externalint=5;
const int j=10;
int main()
{
}
В книге написано,что переменная externalint имеет внешнюю связь,а константа-внутреннюю. Собсно,мне не понятно,почему константа имеет внутреннюю связь,если она объявлена как глобальная.
И ещё:
C++
1
2
3
4
5
6
7
8
9
void function()
{
extern int b;
}
 
int main()
{   
    b=1;
}
Компилятор ругается на необьявленную переменную,хотя если я правильно понял,то приставка extern даёт переменной b из function внешнюю связь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2014, 11:37     Внутренние и внешние связи
Посмотрите здесь:

C++ Библиотека fltk и неразрешенные внешние элементы
внешние функции C++
Как получить внешние параметры в ActiveX? C++
C++ Внешние функции в классе
C++ Подскажите про внешние зависимости
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,333
Завершенные тесты: 1
18.02.2014, 11:57     Внутренние и внешние связи #2
Ключевое слово extern говорит о том, что переменная объявлена где-то еще. Во втором вашем примере в функции main она не объявлена. Она сразу инициализируется.
C++
1
2
3
4
5
6
7
8
9
void function()
{
extern int b;
}
 
int main()
{   
    int b=1;
}
Игорюня
 Аватар для Игорюня
20 / 16 / 7
Регистрация: 07.12.2013
Сообщений: 244
18.02.2014, 11:58  [ТС]     Внутренние и внешние связи #3
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Ключевое слово extern говорит о том, что переменная объявлена где-то еще. Во втором вашем примере в функции main она не объявлена. Она сразу инициализируется.
Какой в этом смысл?Маяк для программиста?
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,333
Завершенные тесты: 1
18.02.2014, 12:03     Внутренние и внешние связи #4
Смысл - использовать одну и ту же переменную в разных модулях.
Extrim88
 Аватар для Extrim88
50 / 50 / 11
Регистрация: 08.02.2013
Сообщений: 189
18.02.2014, 12:06     Внутренние и внешние связи #5
Цитата Сообщение от Игорюня Посмотреть сообщение
Собсно,мне не понятно,почему константа имеет внутреннюю связь,если она объявлена как глобальная.
Константы по-умолчанию имеют внутреннее связывание.
Игорюня
 Аватар для Игорюня
20 / 16 / 7
Регистрация: 07.12.2013
Сообщений: 244
18.02.2014, 12:18  [ТС]     Внутренние и внешние связи #6
Цитата Сообщение от Extrim88 Посмотреть сообщение
Константы по-умолчанию имеют внутреннее связывание.
То есть константу в моём примере не сможет использовать никакой блок?

Добавлено через 1 минуту
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Смысл - использовать одну и ту же переменную в разных модулях.
Что-то между глобальной и локальной переменной?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2014, 12:29     Внутренние и внешние связи
Еще ссылки по теме:

Выбрать, затем вывести четырехзначное число, у которого две внутренние цифры постоянны C++
Неразрешенные внешние символы/элементы C++
C++ Шаблоны: неразрешенные внешние элементы

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,333
Завершенные тесты: 1
18.02.2014, 12:29     Внутренние и внешние связи #7
Игорюня, самый хороший пример для extern это как раз два разных модуля:
Unit1:
C++
1
2
3
4
5
#include Unit2
// Какой-то код
// ...
int b;
// Далее работа с b
Unit2:
C++
1
2
3
4
5
#include Unit1
// Какой-то код
// ...
extern int b;
// Далее работа с b
Вот чтобы в обоих модулях работать с одной и той же переменной, во-втором модуле она объявляется как extern. И тогда линковщик, встретив ее, не будет ругаться, и не будет выделена память под вторую переменную b, а просто произойдет их связь. И они будут считаться за одну и ту же.
Если же убрать модификатор extern из второго модуля, то это будут две совершенно разные переменные.
Yandex
Объявления
18.02.2014, 12:29     Внутренние и внешние связи
Ответ Создать тему
Опции темы

Текущее время: 18:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru