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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.93
lacheti
Сообщений: n/a
#1

Чем отличается между собой объявление, инициализация и определение? - C++

27.08.2012, 12:57. Просмотров 3720. Ответов 5
Метки нет (Все метки)

То есть объявление может быть у переменной или функции и выглядеть к примеру так :
C++
1
int a; void func (int);
.Но выделяется ли на этом этапе память под них или когда это происходит?
Инициализация - это присваивание начального значения переменной, то есть
C++
1
a = 1;
А если инициализация происходит во время объявления
C++
1
int a  = 1
, то как это называется?
Определение - это к примеру описание функции, под которое ещё не выделяется память, то есть
C++
1
void func (int) { int b; }
, и выделяется в момент выполнения программы? Так ли это и если нет, то когда выделяется память?

P.S. Можно поподробней. А то от разных людей слышу разные версии, а в книге которую читал, об этом не очень упоминалось или я подзабыл.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.08.2012, 12:57     Чем отличается между собой объявление, инициализация и определение?
Посмотрите здесь:

C++ Чем отличается определение функции от прототипа?
C++ Объявление ,инициализация ы вывод на экран двусторонней очереди
C++ Чем отличаються между собой книги Страуструпа
Сборка проекта, объявление и инициализация конструкторов в одном месте C++
из четырех числа а1,а2,а3, и а4 одно отличается от трех других, равных между собой; присвоить номер этого числа переменной n C++
Напечатать все пары городов, связанных между собой не напрямую, но не более чем с одной пересадкой C++
C++ Чем отличается this от *this?
Объявление и инициализация динамической матрицы C++
C++ Объявление и определение классов
Объявление и определение функции C++
C++ Объявление и инициализация переменных
Основные типы данных, объявление и инициализация переменных C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
27.08.2012, 13:05     Чем отличается между собой объявление, инициализация и определение? #2
Если переменная глобальная или статическая, память под нее выделяется при запуске программы. Иначе выделяется при входе в фигурные скобки, в которых она объявляется.
Цитата Сообщение от lacheti Посмотреть сообщение
А если инициализация происходит во время объявления
Так и называется, объявление и инициализация. Или инициализации при объявлении.

Добавлено через 1 минуту
И про функции я не пойму - что подразумевается под выделением памяти.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
27.08.2012, 13:10     Чем отличается между собой объявление, инициализация и определение? #3
Цитата Сообщение от lacheti Посмотреть сообщение
Определение - это к примеру описание функции, под которое ещё не выделяется память, то есть
C++
1
void func (int) { int b; }
, и выделяется в момент выполнения программы? Так ли это и если нет, то когда выделяется память?
Под локальные переменные функции память выделяется в стеке в момент вызова функции. Под сам код функции, естессно, ещё при компиляции.
lacheti
Сообщений: n/a
27.08.2012, 13:19     Чем отличается между собой объявление, инициализация и определение? #4
А если эти функции не используются в коде, то есть они используются в зависимости от того поступила ли из вне такая команда. То под такие неиспользуемые функции будет все ровно выделено место? Только под переменные не выделяется, если она не используется. А под что конкретно тогда выделяется при компиляции память под функции?
И что насчет значения слова "определение" в с++?
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
27.08.2012, 13:25     Чем отличается между собой объявление, инициализация и определение? #5
Цитата Сообщение от lacheti Посмотреть сообщение
А если эти функции не используются в коде, то есть они используются в зависимости от того поступила ли из вне такая команда. То под такие неиспользуемые функции будет все ровно выделено место? Только под переменные не выделяется, если она не используется. А под что конкретно тогда выделяется при компиляции память под функции?
И что насчет значения слова "определение" в с++?
Если функция не используется в коде, то это зависит от настроек компилятора. Он может её выкинуть, чтобы места не занимала, а может и скомпилировать на случай, если её будет вызывать кто-то другой, а не вы. В библиотеках же тоже не все функции используются самой библиотекой, но их нельзя выкидывать. Поэтому скорее всего скомпилирует.

Память выделяется под код. Действия, которые выполняет функция, тоже ведь надо где-то хранить. Только память выделяется не лично под код этой функции, а под всю программу сразу.

Насчёт определения — спрашивайте у того, кто вам это слово сказал; потому что тут мысли не читают. Есть объявление, есть инициализация. Возможно, там действительно понимается под определением объявление с одновременной инициализацией, а возможно что-то другое.
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
27.08.2012, 13:26     Чем отличается между собой объявление, инициализация и определение? #6
Насколько мне известно, если функция никак не используется в программе, то она в нее не включается, если только она не объявлена со спецификатором static. Определение - собственно реализация функции.
Yandex
Объявления
27.08.2012, 13:26     Чем отличается между собой объявление, инициализация и определение?
Ответ Создать тему
Опции темы

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