С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Игорюня
20 / 16 / 7
Регистрация: 07.12.2013
Сообщений: 244
#1

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

18.02.2014, 11:37. Просмотров 817. Ответов 6
Метки нет (Все метки)

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 внешнюю связь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2014, 11:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Внутренние и внешние связи (C++):

Выбрать, затем вывести четырехзначное число, у которого две внутренние цифры постоянны - C++
Здравствуйте. Нужно выбрать, затем вывести четырехзначное число, у которого две внутренние цифры постоянны, а две остальные меняются. ...

внешние функции - C++
Всем привет! Сижу,туплю: В задании написано: "тип данных является струкурой с необходимыми полями, а операции реализуются как...

Внешние объекты в классе - C++
Если класс исплользует какую то внешнюю переменную (например hWnd), то как будет более корректно его создать: class MyClass { ...

Внешние функции в классе - C++
del

Подскажите про внешние зависимости - C++
Всем привет. Никак не могу подключить к проекту внешние зависимости. Собираю консольное приложение в VS6. Прописываю пути в настройках...

Неразрешенные внешние символы/элементы - C++
появились такие ошибки error LNK1120: неразрешенных внешних элементов: 1 error LNK2019: ссылка на неразрешенный внешний символ...

6
SatanaXIII
Супер-модератор
Эксперт С++
5643 / 2678 / 252
Регистрация: 01.11.2011
Сообщений: 6,574
Завершенные тесты: 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;
}
1
Игорюня
20 / 16 / 7
Регистрация: 07.12.2013
Сообщений: 244
18.02.2014, 11:58  [ТС] #3
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Ключевое слово extern говорит о том, что переменная объявлена где-то еще. Во втором вашем примере в функции main она не объявлена. Она сразу инициализируется.
Какой в этом смысл?Маяк для программиста?
0
SatanaXIII
Супер-модератор
Эксперт С++
5643 / 2678 / 252
Регистрация: 01.11.2011
Сообщений: 6,574
Завершенные тесты: 1
18.02.2014, 12:03 #4
Смысл - использовать одну и ту же переменную в разных модулях.
1
Extrim88
50 / 50 / 11
Регистрация: 08.02.2013
Сообщений: 189
18.02.2014, 12:06 #5
Цитата Сообщение от Игорюня Посмотреть сообщение
Собсно,мне не понятно,почему константа имеет внутреннюю связь,если она объявлена как глобальная.
Константы по-умолчанию имеют внутреннее связывание.
1
Игорюня
20 / 16 / 7
Регистрация: 07.12.2013
Сообщений: 244
18.02.2014, 12:18  [ТС] #6
Цитата Сообщение от Extrim88 Посмотреть сообщение
Константы по-умолчанию имеют внутреннее связывание.
То есть константу в моём примере не сможет использовать никакой блок?

Добавлено через 1 минуту
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Смысл - использовать одну и ту же переменную в разных модулях.
Что-то между глобальной и локальной переменной?
0
SatanaXIII
Супер-модератор
Эксперт С++
5643 / 2678 / 252
Регистрация: 01.11.2011
Сообщений: 6,574
Завершенные тесты: 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 из второго модуля, то это будут две совершенно разные переменные.
1
18.02.2014, 12:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2014, 12:29
Привет! Вот еще темы с ответами:

Шаблоны: неразрешенные внешние элементы - C++
Пишу шаблонный класс-массив. Появилась такая проблема. Если инициализировать конструктор и дружественные перегрузки операторов в самом...

Библиотека fltk и неразрешенные внешние элементы - C++
Здравствуйте. Уже не знаю, куда обратится, пишу сюда. Извиняюсь, если вопрос не новый, но думаю что не тривиальный. Вобщем читаю книгу...

Как получить внешние параметры в ActiveX? - C++
День добрый всем! Есть у меня Activex-компонент. Он должен связываться с сервером и открывать указанный ему файл. Имя файла задаётся...

Наследование классов(ошибка неразрешенные внешние символы) - C++
Добрый день! Реализую программу для решения СЛАУ методом Гаусса. Встрял на том, что компилятор выдает ошибку на использование...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.